我的UIActionSheet表现得像非模态?

时间:2010-12-22 22:58:18

标签: iphone ios4 uiactionsheet

NSLog(@"Display Action Sheet");

UIActionSheet *alert = [[UIActionSheet alloc] initWithTitle:@"Warning" delegate:self cancelButtonTitle:@"Proceed" destructiveButtonTitle:@"Cancel (current data will be discard)" otherButtonTitles:nil];

[alert showInView:[self view]];
[alert release];

NSLog(@"Action Sheet Released");

这是我创建操作表的代码。在我看到操作表之前,“显示操作表”和“已发布的操作表”都会输出到调试器控制台。实际上,在我收到用户输入后我要执行的其他代码都会在我出现行动表之前执行。

这很奇怪。我以为我可以根据用户的输入使用操作表来执行代码。

3 个答案:

答案 0 :(得分:1)

行动表不是模态的。在iOS中几乎没有。您需要使用UIActionSheetDelegate方法之一处理用户在工作表中选择的任何内容,例如-actionSheet:clickedButtonAtIndex:

答案 1 :(得分:0)

确保标题中包含UIActionSheetDelegate

答案 2 :(得分:0)

如果我想在没有用户允许取消选项的情况下回答问题,我会做这样的事情(关键是:" if(buttonIndex == -1)performSelector")...基本上只是循环直到快乐...

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (debug==1) {
        NSLog(@"Running %@ '%@'", self.class, NSStringFromSelector(_cmd));
    }
    if (buttonIndex == -1) {
        [self performSelector:@selector(selectDb) withObject:nil afterDelay:0.1];
    } else {
        [DataLayer selectDatabase: buttonIndex];
    }
}

- (void) selectDb {
    if (![DataLayer hasSelectedDatabase]) {
        actionSheet  = [[UIActionSheet alloc] initWithTitle:@"Filter" delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:@"Main", @"Training", @"Test 1", @"Test 2", @"Test 3", @"Test 4", nil];
         [actionSheet showInView:[self view]];
   }
}