即使在设置协议和委托后,我尝试从UIPopoverPresentationController返回的内容也会失败。
我在我的控制器中包含自定义委托(SavingViewControllerDelegate)和UIPopoverPresentationControllerDelegate,它将调用popover。用户将点击正在我的控制器中调用函数的UIBarButton。在控制器中,我以编程方式打开Popover:
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("PopoverProfileViewController") as! ProfileViewController
vc.modalPresentationStyle = UIModalPresentationStyle.Popover
let popover: UIPopoverPresentationController = vc.popoverPresentationController!
popover.barButtonItem = sender as? UIBarButtonItem
popover.delegate = self
self.presentViewController(vc, animated: true, completion:nil)
在这个视图控制器中,我有这个功能
func sendLoginStatus(status : Bool) {
print("LoginStatus")
print(status)
}
在popover的视图控制器中,我添加了一个协议:
protocol SavingViewControllerDelegate
{
func sendLoginStatus(status : Bool)
}
我还在func sendLoginStatus(状态:Bool)中添加了一个突破,它返回"委托SavingViewControllerDelegate?一些"
在ProfileViewController中:
class ProfileViewController: UIViewController {
var delegate : SavingViewControllerDelegate?
当用户点击按钮时,bool值应该发送回呼叫控制器。
@IBAction func logoutButton(sender: AnyObject) {
print("sendStatus")
delegate?.sendLoginStatus(true)
dismissViewControllerAnimated(true, completion: nil)
}
我在委托中添加了断点?.ndndLoginStatus(true),它返回"委托SavingViewControllerDelegate?"没有。永远不会调用sendLoginStatus。
答案 0 :(得分:1)
您使用了UIPopoverPresentationController的委托以及您自己的协议的预期结果。
您应该创建对自己的委托的引用,而不是设置符合协议public function getAccess(){
$username = $this->input->post('username');
$password = $this->input->post('password');
if($array = $this->User_model->login($username,$password)) {
echo json_encode($array);
} else { echo 'NO DATA!'; }
}
的popover委托:
UIPopoverPresentationControllerDelegate
您现在可以使用自己的委托函数和UIPopoverPresentationController委托函数:
let storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewControllerWithIdentifier("PopoverProfileViewController") as! ProfileViewController
// Setting the SavingViewControllerDelegate
vc.delegate = self
vc.modalPresentationStyle = UIModalPresentationStyle.Popover
let popover: UIPopoverPresentationController = vc.popoverPresentationController!
popover.barButtonItem = sender as? UIBarButtonItem
// Setting the UIPopoverPresentationControllerDelegate
popover.delegate = self
self.presentViewController(vc, animated: true, completion:nil)
旁注1:为了防止代表保留周期,我建议使用extension YourClass : UIPopoverPresentationControllerDelegate {
// All functions of the UIPopoverPresentationControllerDelegate you wish to use
}
extension YourClass : SavingViewControllerDelegate {
func sendLoginStatus(status : Bool) {
// Code
}
}
而不仅仅是var ~~
旁注2:通常的做法是在委托函数中包含发件人:
weak var delegate: SavingViewControllerDelegate?