【问题标题】:Delegation: delegated method doesn't see outlets委托:委托方法看不到出口
【发布时间】:2015-01-30 14:10:00
【问题描述】:

我在Tab Bar View 中有two views。我希望我的 second 视图在其文本字段更改值时通知 first 视图。我已经为它完成了所有必要的编码,但是有一个问题 - first 视图在方法声明中没有看到连接的标签出口。

second 视图的代码:

- (IBAction)textFieldHasChanged:(UITextField *)sender {

id<HPAAddCarOverallInfoTVCDelegate> strongDelegate = [[HPAAddCarMainViewController alloc] init];

if([strongDelegate respondsToSelector:@selector(addCarOverallInfoVC:textFieldValueChanged:)]) {

    [strongDelegate addCarOverallInfoVC:self textFieldValueChanged:sender.text];
    }
}

first 视图的代码:

-(void)addCarOverallInfoVC:(HPAAddCarOverallInfoTableViewController *)viewController textFieldValueChanged:(NSString *)value
{
self.overallVCFieldCount.text = value;
NSLog(@"%@", value);
}

self.overallVCFieldCount.text = value; - 值存在,但 textField 不存在。

我认为,问题出在这行代码上:

id<HPAAddCarOverallInfoTVCDelegate> strongDelegate = [[HPAAddCarMainViewController alloc] init];

我猜,那个代表不是我正在使用的确切视图。通过情节提要同时加载两个视图。如果我的想法是正确的,你能告诉我,我怎样才能给精确的first 视图指针,当标签栏视图控制器进入屏幕时,second 视图被加载?

【问题讨论】:

  • 您必须将“第一个视图”分配给您的委托。像 strongDelegate = firstViewController.何时何地取决于您启动“第一视图”的位置。

标签: ios objective-c delegates delegation


【解决方案1】:

您正在textFieldHasChanged 中创建一个新的视图控制器。如果您在 IB 中有该视图控制器,请像这样实例化它:

UIStoryboard *st = [UIStoryboard storyboardWithName:[[NSBundle mainBundle].infoDictionary objectForKey:@"UIMainStoryboardFile"] bundle:[NSBundle mainBundle]];
id<HPAAddCarOverallInfoTVCDelegate> strongDelegate = st instantiateViewControllerWithIdentifier:@"identifier"];

identifier 是您在情节提要中为视图控制器指定的标识符。

【讨论】:

  • 谢谢您的回复。这个建议确实触发了委托方法。但是,不幸的是我有同样的行为——我不能以任何方式在方法声明中将value 分配给我的 textFields,但可以在方法之外这样做。
猜你喜欢
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
相关资源
最近更新 更多