【发布时间】:2014-04-08 01:02:14
【问题描述】:
我有一个本质上是条形码扫描仪的 cameraViewController。我还有 3 个视图控制器(A、B 和 C),每个控制器都有一个通向这个 cameraViewController 的按钮。
当 cameraViewController 扫描条形码时,它会执行以下操作:
if (self.detectionString != nil)
{
[self.delegate cameraViewController:self withCardNumber:self.detectionString];
[self.navigationController popViewControllerAnimated:YES ];
break;
}
它有一个委托并将检测到的字符串发送回前一个/父视图控制器。 所有三个 viewController 都实现了以下方法:
#pragma mark - CameraViewControllerDelegate
- (void)cameraViewController:(CameraViewController *)cameraViewController withCardNumber:(NSString *)number
{
self.CardNumbertext.text = number ;
}
所以这两种方法都适用于 cameraViewController 和 viewControllerA。但是,当parentViewController为B或C时,cameraViewController仍会弹回右边的控制器,但delegate函数并没有运行。我做错了什么?
【问题讨论】:
-
一次只能有一个对象的委托,所以看起来控制器 A 是那个接手的人。因此,您要么需要让前一个委托人放弃该滚动,以便另一个可以成为委托人,要么使用 NSNotification 来代替。
-
如何设置和切换代理?
-
在cameraViewController初始化时,将delegate设置为“当前”的parentViewController。
-
您应该显示如何设置委托的代码。还要解释您的控制器层次结构(A、B 和 C 是否嵌入在导航控制器中,是否有标签栏控制器等)。
标签: ios objective-c delegates