在我的应用中,当用户点击按钮时,它会调用prepareForSegue。应用程序需要检查状态,然后提示用户是否要重写或删除。问题是它在显示UIActionSheet之前加载下一个视图控制器。如何在调用prepareForSegue之前强制显示UIActionSheet?这是我对prepareForSegue的逻辑;
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
if ([[segue identifier] isEqualToString:@"mySegue"]) {
//Check Logic removed for simplicity
if ([myCheck count] > 0){
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Save?"
delegate:self
cancelButtonTitle:@"Delete"
destructiveButtonTitle:@"Save"
otherButtonTitles:nil];
[actionSheet showFromToolbar:self.navigationController.toolbar];
}
}
}
这是行动表;
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex
{
if (buttonIndex == [actionSheet cancelButtonIndex])
{
//Delete logic removed
}else {
//Save logic removed
}
}
答案 0 :(得分:1)
你将无法在segue中完成。当您获得应该触发它的按钮索引时,您必须在操作表处理程序中手动加载视图控制器。这意味着触发segue现在必须断开连接并指向将创建并显示您的操作表的IBAction。 prepareForSegue旨在允许您在显示目标视图控制器之前设置参数。当你准备ForSegue时,segue已经启动了。此时,没有返回/取消/延迟执行segue。
最诚挚的问候。
答案 1 :(得分:1)
我发现可以从动作表中执行Segue 只要segue来自View控制器,并且这里的标识符就是一个例子。
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
if (buttonIndex == [actionSheet cancelButtonIndex]) return;
if (buttonIndex == 0) {
[self performSegueWithIdentifier:@"visitWeb" sender:self];
}
if (buttonIndex == 1) {
if ([MFMailComposeViewController canSendMail])
{
可能不是正确的方式,因为我有点新手但是对于我在StoryBoard上的模态视图控制器它似乎可以做到这一点
答案 2 :(得分:0)
创建操作表是一个异步事件,不会阻止segue。您需要从操作表中触发segue。