【问题标题】:How to pass data to a controller via delegate callback having a tab bar controller?如何通过具有标签栏控制器的委托回调将数据传递给控制器​​?
【发布时间】:2016-10-14 00:56:31
【问题描述】:

Please have a look at the screenshot of my project for better understanding 我在堆栈溢出和其他有关编写自定义委托的网站上浏览了很多。但在我的情况下,代表没有被调用。从截图中可以看出,初始视图控制器有一个点击按钮,标签栏被调用。从第一个 Tab bar 屏幕开始,假设我想将数据传回初始视图控制器,我该怎么做?我什至可以使用 NSUserDefaults 但我想以正确的方式编写代码。所以我开始知道委托是将数据从一个控制器传回前一个控制器的最佳方式。但是由于我在两者之间使用了标签栏,所以没有调用代理。请帮助,

以下是代码, 我希望将数据从第一个选项卡传递到初始控制器。

TabScreenController.h:

@protocol TabScreenControllerDelegate <NSObject>
-(void)someFunction:(NSString*)someValue;
@end

@interface TabScreenController : UIViewController
@property (nonatomic, weak) id <TabScreenControllerDelegate> delegate;
@end

InitialViewController.h:

@interface InitialViewController : UIViewController<TabScreenControllerDelegate>

InitialViewController.m:

TabScreenController* controller = [[TabScreenController alloc]init];
[controller setDelegate:self];


//The delegate is not getting called
-(void)someFunction:(NSString *)someValue{
    NSLog(@"%@", someValue);
}

委托没有被调用,可能 InitialViewController.m 中的 TabScreenController 与单击选项卡时创建的实例不同。

请帮助我解决这个问题。我该如何处理这种情况。如果我没有说清楚,请告诉我..

谢谢

【问题讨论】:

    标签: ios objective-c tabs delegates uitabbarcontroller


    【解决方案1】:

    错误是您没有将委托设置为现有 TabScreenController,而是实例化新的TabScreenController 并设置委托。使用TabBarController 时,所有childViewControllers 都已实例化。 在您的情况下,您需要寻找 TabScreenController 然后设置它的委托。

    NSArray* tabChildViewControllers = tabBarController.viewControllers;
    
    
    for (UIViewController * childVC in tabChildViewControllers) {
    
         if ([childVC isKindOfClass:[TabScreenController class]]) {
             // set your the delegate
    
         }
     }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-11
      • 1970-01-01
      • 2015-02-10
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多