1

Sams ** Teach Yourself iPadアプリケーション開発を24時間で行うと、「アクションシートを「アニメーション化されていない」方法で表示し、最初に表示されたときに完全なポップオーバービューを埋めることができます...これを行うには、アクションシートを次のように表示する必要があります。メソッド

showFromRect:inView:animated

「rect」をポップオーバーの寸法に設定し、ビューをポップオーバービューコントローラのビューに設定し、「animated」をfalseに設定します。アクションシートの表示は、ポップオーバービューコントローラのviewDidLoadメソッドなど、ポップオーバービューが最初にロードされるときに実行する必要があります。

OK、簡単..ポップオーバーの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

UIActionSheet1 つの解決策は、 inviewWillAppearまたは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このコードが呼び出されたとき、まだ完全にインスタンス化されていません。

NSTimerハックな代替手段として、コールバックとして IBAction メソッドを使用して短い時間 (.1 秒程度) を挿入することをお勧めします。

于 2011-07-06T20:43:34.493 に答える