如何通过presentModalViewController呈现任何viewcontroller?

时间:2013-12-12 11:07:25

标签: ios objective-c

为解决此问题,我尝试使用KVO(键值观察)来监视名为“presentsViewController”的属性。我创建了一个自定义viewcontroller作为基本viewcontroller,它用于我的应用程序中所有viewcontrollers的基本viewcontroller。然后,我将以下代码添加到viewcontroller的 initWithNibName:bundle:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        [self addObserver:self forKeyPath:@"presentedViewController" options:NSKeyValueObservingOptionNew context:nil];
    }
    return self;
}

并且,重写这样的观察方法:

- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context {
    NSLog(@"object %@", object);
}

最后,我创建了一个从基本viewcontroller派生的viewcontroller,它包含上面的代码。 当我使用 presentModalViewController 方法使其成为模态viewcontroller时。但是,观察我安装不起作用。我预计在调用方法时会进行观察。不幸的是,没有任何事情发生。

总之,我有两个问题。首先是为什么这不起作用。另一个是有很好的方法来实现这个目标。

修改 我能够通过@jailani habeeb的方式取得成功。谢谢@jailani habeeb。 另外,我真的很想知道为什么KVO不起作用。像'title'这样的任何其他财产都运作良好..

2 个答案:

答案 0 :(得分:1)

presentModalViewController在iOS 6中已弃用。您可以使用presentViewController:animated:completion:而不是。您可以在完成块中执行逻辑。

答案 1 :(得分:0)

  1. 您可以继承UIViewcontroller并覆盖方法

    presentViewController:动画:完成:

  2. 然后在出现任何视图控制器时进行后续通知

  3. 为您的视图控制器注册该通知,无论您身在何处 需要通知