我的应用会拍照,然后需要询问用户他们想要为他们的图像命名的内容。
我尝试过使用UIAlertView,但是我遇到了这个问题,因为代码没有暂停等待用户输入,因此没有及时收集字符串本身。
我现在想要尝试的是创建一个新的视图控制器,它只有一个文本字段供用户输入其PDF文件的名称。我想知道的是它在概念上是如何工作的(或者它是否会起作用)。
伪代码: 1.用户点击拍照按钮,该按钮运行捕获图像的方法。 2.图像在内存中后,将显示具有文本字段的视图控制器。 3.用户将信息输入到文本字段中 该观点被驳回 5.捕获图像的方法中的代码仍在继续。
这是视图控制器的工作方式吗?如果我从一个按钮中显示一个视图控制器,然后从新视图控制器中的另一个按钮中关闭所呈现的视图控制器,原始方法中的代码是否继续执行它停止的位置?
答案 0 :(得分:2)
否。原始方法中的代码在显示UIAlertView
(或UIActionSheet
或其他任何内容)后立即执行。它不会等待解雇。
要处理解除UIAlertView
的事件,例如有一种名为 Delegation 的机制。它的工作原理如下:
UIAlertView
。UIAlertView
的{{1}}属性设置为某个对象。通常是View Controller本身。该对象应该实现.delegate
定义的几种方法。UIAlertViewDelegate
会在其Delegate上调用其中一个已定义的方法。在我们的例子中,View Controller将我们带回到我们的代码中。示例代码:
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
我希望能让你开始