什么是检查哪个委托推动模态视图控制器的优雅解决方案?

时间:2012-03-06 08:14:23

标签: ios cocoa-touch uitableview delegates

我有一个显示在UITableViewController上的模式,它应该在UITextField占位符文本中显示不同的文本,具体取决于UITableViewController调用它。

一个UITableViewController显示句子,其他故事。如果模型被推到显示句子的TableViewController上,占位符应该说“你的新句子”;如果在显示故事的TableViewController上推送模态,它应该说“你的故事的标题”。

我可以在ViewDidLoad上使用:

NSLog代理人的姓名
NSLog(@"delegate: %@", self.delegate);

但我不确定如何使用if语句检查。 它也感觉错误或不优雅 - 就像它破坏了某处的设计原则。

检查哪个委托推送模态视图控制器的优雅解决方案是什么?

3 个答案:

答案 0 :(得分:2)

您的模态控制器不应该知道有关委托的任何信息,除非它实现了您设置的任何委托协议。所以你有两个选择:

  • 向您的委托协议添加一个返回占位符字符串的方法,然后您的模态会要求在需要时使用该字符串。
  • 使占位符字符串成为模态视图控制器的属性,并在创建时将占位符字符串传递给模态(在prepareForSegue:中或在创建时或类似时)

选项1可能更好。

答案 1 :(得分:1)

最干净的方法可能是在自定义视图控制器上放置一个属性,然后在呈现它之前设置它:

MyModalViewController *viewController = [[MyModalViewController alloc] init];
viewController.placeholder = @"Your New Sentence";
[self presentModalViewController:viewController animated:YES];

然后,在视图控制器的viewDidLoad中,您可以使用属性值来设置文本字段。

模态视图控制器并不需要知道“谁”推它;它只需要一些“谁”应该在设置时提供的信息。

答案 2 :(得分:0)

我建议为模态中的每个BOOL保留一个controller变量... 所以喜欢这个

BOOL view1;
BOOL view2;
BOOL view3; .. etc 

然后呈现模态设置一个BOOLTRUE ..取决于控制器...然后在你的模态viewDidLoad ..做一个switch语句来检查哪个值为TRUE ..并设置文本

相关问题