查看控制器和代码完成

时间:2014-06-13 17:29:29

标签: ios view viewcontroller

我的应用会拍照,然后需要询问用户他们想要为他们的图像命名的内容。

我尝试过使用UIAlertView,但是我遇到了这个问题,因为代码没有暂停等待用户输入,因此没有及时收集字符串本身。

我现在想要尝试的是创建一个新的视图控制器,它只有一个文本字段供用户输入其PDF文件的名称。我想知道的是它在概念上是如何工作的(或者它是否会起作用)。

伪代码: 1.用户点击拍照按钮,该按钮运行捕获图像的方法。 2.图像在内存中后,将显示具有文本字段的视图控制器。 3.用户将信息输入到文本字段中 该观点被驳回 5.捕获图像的方法中的代码仍在继续。

这是视图控制器的工作方式吗?如果我从一个按钮中显示一个视图控制器,然后从新视图控制器中的另一个按钮中关闭所呈现的视图控制器,原始方法中的代码是否继续执行它停止的位置?

2 个答案:

答案 0 :(得分:2)

否。原始方法中的代码在显示UIAlertView(或UIActionSheet或其他任何内容)后立即执行。它不会等待解雇。

要处理解除UIAlertView的事件,例如有一种名为 Delegation 的机制。它的工作原理如下:

  1. 您在View Controller中创建UIAlertView
  2. 您将UIAlertView的{​​{1}}属性设置为某个对象。通常是View Controller本身。该对象应该实现.delegate定义的几种方法。
  3. 您出示警报,您的代码会立即继续。
  4. 当用户单击某个按钮时,UIAlertViewDelegate会在其Delegate上调用其中一个已定义的方法。在我们的例子中,View Controller将我们带回到我们的代码中。
  5. 在您的委托方法中,您可以在显示警报之前“继续”您想要执行的操作。
  6. 示例代码:

    UIAlertView

    此外,您必须在View Controller上声明- (void)presentAlert { // 1 UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Hello!" message:nil delegate:self // 2 cancelButtonTitle:@"Eh?" otherButtonTitles:@"Hello!", @"Hi!", @"Aloha!" nil]; [alert show]; // 3 NSLog(@"Did present alert"); // immediately executed } // Between these method calls may pass several seconds, minutes or eternity. - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { // 4, 5 NSLog(@"Did click button %@", [alertView buttonTitleAtIndex:buttonIndex]); } 协议:

    UIAlertViewDelegate

答案 1 :(得分:1)

我相信你对Viewcontrollers有很多误解。但我无法解释这里的所有问题,或者这篇文章会变成一本书。所以这是一个非常有用的链接(我希望你已经阅读过)和一些提示: https://developer.apple.com/library/ios/featuredarticles/viewcontrollerpgforiphoneos/Introduction/Introduction.html

Viewcontrollers以模态方式(堆叠在彼此之上)或在公共ParentViewController(例如NavigationController或SlideViewController)中呈现。呈现控制器将始终保持控制器在后台运行或完成Viewcontrollers逻辑,然后再呈现新的逻辑。因此,对您的问题的最短回答是否定的。

特别注意Viewcontroller的生命周期。 ViewControllers具有在特定情况下调用的特殊回调方法。请注意viewDidLoad和viewDidAppear - 方法,这将清除您的困惑。

最后,同样重要的是,查看委托模式。代理是一种在viewcontrollers之间发送消息的方法。因此,您可以使获取名称的ViewController将具有所选名称的消息发送到拍摄照片的viewController。 下面是代理编程指南的链接: https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html

我希望能让你开始