在Apple提供的this swift教程中,它有一个从照片库中选择图像的示例。代码如下所示:
class ViewController: UIImagePickerControllerDelegate, // Question 1
UINavigationControllerDelegate {
...
@IBAction func selectImageFromPhotoLibrary(sender: UITapGestureRecognizer) {
nameTextField.resignFirstResponder()
// Question 2
let imagePickerController = UIImagePickerController()
imagePickerController.sourceType = .PhotoLibrary
imagePickerController.delegate = self
presentViewController(imagePickerController, animated: true, completion: nil)
}
// Question 3
func imagePickerControllerDidCancel(picker: UIImagePickerController) {
dismissViewControllerAnimated(true, completion: nil)
}
}
我对此代码有三个问题:
答案 0 :(得分:1)
很简单,UIImagePickerControllerDelegate协议用于响应图像选择器中发生的事情。 UIImagePickerController 还要求其$('.label a').each(function() {
var $this=$(this);
$this.closest('li').addClass($this.text());
});
// Combine This
$('button').each(function(){
var liInd = 0;
var cl = '';
var txt = '';
var clses = [];
var ind = $('button').index($(this)) + 1;
$('li').each(function(){
if(clses.indexOf($(this).attr('class')) === -1){
clses.push($(this).attr('class'));
liInd = liInd + 1;
}
if(ind === liInd){
cl = $(this).attr('class');
txt = $(this).find('a').text();
return false; //break
}
});
$('button:nth-child(' + ind + ')').addClass(cl);
$('button:nth-child(' + ind + ')').text(txt);
});
符合UINavigationControllerDelegate,因为图像选择器是(导航控制器的子类)。但是,这些方法是可选的。
它不会受到伤害,但是不需要在实例变量中保存对图像选择器的引用。选择器本身作为委托方法的第一个参数传入。它会自动保留,直到它消失。
您需要处理delegate
方法并关闭控制器,否则图像选择器将保留在屏幕上!
编辑虽然现在看来,如果你没有实现委托方法,UIImagePickerController会自动解散。
为了测试这个,我只是覆盖DidCancel
来添加一个断点:
然后,当您单击“取消”按钮时,您可以看到以下堆栈跟踪: