Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 将UIViewController用于协议_Objective C_Ios_Uiviewcontroller_Delegates_Protocols - Fatal编程技术网

Objective c 将UIViewController用于协议

Objective c 将UIViewController用于协议,objective-c,ios,uiviewcontroller,delegates,protocols,Objective C,Ios,Uiviewcontroller,Delegates,Protocols,我为我的应用程序构建了一个UITableViewController,它与我的核心数据模型交互。它的主要用途是被推到导航控制器上,显示实体列表,并允许我编辑/选择和深入到它们的信息等 然而,在我的应用程序的其他地方,我现在想显示一个简单的选择器来选择其中一个实体。我认为实现这一点的最佳方法是建立一个协议来处理选择器,该选择器可以将有关用户是否取消或选择了某个实体等的消息发送回我的代理 由于大部分编码都是相同的,我的问题是:是否可能/或以任何方式建议将UITableViewController作为

我为我的应用程序构建了一个UITableViewController,它与我的核心数据模型交互。它的主要用途是被推到导航控制器上,显示实体列表,并允许我编辑/选择和深入到它们的信息等

然而,在我的应用程序的其他地方,我现在想显示一个简单的选择器来选择其中一个实体。我认为实现这一点的最佳方法是建立一个协议来处理选择器,该选择器可以将有关用户是否取消或选择了某个实体等的消息发送回我的代理

由于大部分编码都是相同的,我的问题是:是否可能/或以任何方式建议将UITableViewController作为协议启用

i、 e.正常显示时,其行为与当前相同(UIViewController的标准子类),但也可以由代理以模式显示,并将消息传递给代理


对她关于最佳实践的想法感兴趣吗?

你甚至不需要正式的协议。从另一个控制器实例化UITableViewController时,只需给它一个
@属性(非原子,赋值)id委托
。将其设置为委托。使用
id
不要将类紧密地结合在一起,也不要保留委托

为调用控制器中的
didCancelPicking…:(id)sender
didPick…:(id)sender item:(id)pickedItem
实现两种方法

现在,以模式查看UITableViewController时,您需要做两件事。提供一个取消按钮并对该按钮作出反应(
didCancelPicking…
),并可能修改
tableView:didSelectRowAtIndexPath:
以将
didPick…
发送给学员。始终使用
respondsToSelector:
测试代理,如果它执行
操作,则执行选择器:withObject:
。始终将发送方作为这些委托方法的第一个参数

另外,始终向调用类显示和隐藏模态控制器。例如,不要让它从UINavigationController中删除自身

这些是我能马上想到的最佳实践


关于您在这里的特定代码重用:当您重用UITableViewController并希望更改其在以模态方式显示时的行为时,您必须决定代码是否变得太混乱。例如,在这种情况下,您以后可能希望阻止编辑和向下钻取。当然,如果(self.delegate)检查,您可以将其封装在
中,但是…

您甚至不需要正式的协议。从另一个控制器实例化UITableViewController时,只需给它一个
@属性(非原子,赋值)id委托
。将其设置为委托。使用
id
不要将类紧密地结合在一起,也不要保留委托

为调用控制器中的
didCancelPicking…:(id)sender
didPick…:(id)sender item:(id)pickedItem
实现两种方法

现在,以模式查看UITableViewController时,您需要做两件事。提供一个取消按钮并对该按钮作出反应(
didCancelPicking…
),并可能修改
tableView:didSelectRowAtIndexPath:
以将
didPick…
发送给学员。始终使用
respondsToSelector:
测试代理,如果它执行
操作,则执行选择器:withObject:
。始终将发送方作为这些委托方法的第一个参数

另外,始终向调用类显示和隐藏模态控制器。例如,不要让它从UINavigationController中删除自身

这些是我能马上想到的最佳实践

关于您在这里的特定代码重用:当您重用UITableViewController并希望更改其在以模态方式显示时的行为时,您必须决定代码是否变得太混乱。例如,在这种情况下,您以后可能希望阻止编辑和向下钻取。当然,如果(self.delegate)
检查,您可以将其封装在
中,但是