1

Sams **在 24 小时内自学 iPad 应用程序开发说我可以“以“非动画”方式显示操作表,当它首次出现时填充完整的弹出视图......为此,您需要显示操作表方法

showFromRect:inView:动画

将“rect”设置为弹出框的尺寸,将视图设置为弹出框视图控制器的视图,并将“动画”设置为 false。首次加载弹出视图时需要显示操作表,例如在弹出视图控制器的 viewDidLoad 方法中。

好的,简单..这是我的弹出框 viewDidLoad 方法中的代码:

- (void)viewDidLoad {

self.contentSizeForViewInPopover=CGSizeMake(400.0,400.0);


    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Available Actions" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destroy" otherButtonTitles:@"Negotiate", @"Compromise", nil];

    [actionSheet showFromRect:[self.view bounds] inView:self.view  animated:NO];

    [actionSheet release];

    [super viewDidLoad];
}

但这每次都在inView:self.view参数处失败,但有以下例外:

Invalid parameter not satisfying view != nil

有任何想法吗?

请注意,如果我将完全相同的代码放在 IBAction 方法中并从弹出窗口中的按钮触发它,它会顺利运行!

4

2 回答 2

2

一种解决方案是调用UIActionSheetin viewWillAppearor viewDidAppear:例如:

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];

    [self showActionSheet];
}

- (void)showActionSheet {
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Available Actions" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destroy" otherButtonTitles:@"Negotiate", @"Compromise", nil];

    [actionSheet showFromRect:[self.view bounds] inView:self.view  animated:NO];

    [actionSheet release];
}
于 2011-07-06T20:44:53.163 回答
0

self.view调用此代码时尚未完全实例化。

我建议,作为一个 hacky 替代方案,NSTimer使用您的 IBAction 方法作为回调输入很短的时间(0.1 秒或其他时间)。

于 2011-07-06T20:43:34.493 回答