1

現在、複数のサービスを使用して「共有」するオプションが必要なアプリケーションを開発しています。メール、ツイッターなど。

これには、UIBarButtonItemコード化されており、タッチすると、これがトリガーされます。

UIActionSheet *sheet = [[UIActionSheet alloc] 
                            initWithTitle:@""
                            delegate:self
                            cancelButtonTitle:nil
                            destructiveButtonTitle:nil
                            otherButtonTitles:nil];

    [sheet addButtonWithTitle:@"Email"];
    [sheet addButtonWithTitle:@"Tweet"];
    [sheet addButtonWithTitle:@"Cancel"];

    sheet.cancelButtonIndex = sheet.numberOfButtons-1;

    [sheet showFromRect:self.view.bounds inView:self.view animated:YES];
    [sheet release];

これと組み合わせて、どのボタンが選択されているかを検出します。

clickedButtonAtIndex:(NSInteger)buttonIndex {
    if (buttonIndex == actionSheet.cancelButtonIndex) { return; }
    switch (buttonIndex) {
        case 0:
        {

            [self emailThis];
            break;
        }
        case 1:
        {
            [self tweetThis];
            break;
        }
    }

これは、iPhone でうまく機能します。残念ながら、iPad では正しく表示されません。を表示しようとしているように見えますがUIPopoverController、実質的に高さのないナビゲーションバーの中央に配置されています。

UIPopoverController の使用方法を調べましたが、ボタンでの使用方法がわかりません。とにかく、上記のコードを調整して、ボタンを適切に表示できるようにすることはできますか?

どうもありがとう、

ライアン

PS: Objective-C/iOS コーディングは初めてなので、具体的に教えてください。ありがとうございました :)

編集: 私は使用してみました:

[sheet showFromBarButtonItem:[self share] animated:YES];

しかし、うまくいきません。ボタンのコードは次のとおりです。

UIBarButtonItem *share = [[UIBarButtonItem alloc] 
                                initWithTitle:@"Share"                                            
                                style:UIBarButtonItemStyleBordered 
                                target:self 
                                action:@selector(loadShare)];
    self.navigationItem.rightBarButtonItem = share;
    [share release];

また、.h ファイルのコードは次のとおりです。

@interface DetailViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
UIBarButtonItem *share;
}

@property (nonatomic, retain) IBOutlet UIBarButtonItem *share;

デバッグエラーは次のとおりです。

キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: ' * -[__NSPlaceholderArray initWithObjects:count:]: オブジェクト [0] から nil オブジェクトを挿入しようとしています'

4

3 に答える 3

7
self.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionPhotoShare:)] autorelease];

...

-(void)actionPhotoShare:(id)sender
{
actionSheetShare = [[UIActionSheet alloc] initWithTitle:nil 
                                                              delegate:self 
                                                     cancelButtonTitle:nil
                                                destructiveButtonTitle:NSLocalizedString(@"ActionSheet_Cancel", @"")
                                                     otherButtonTitles:NSLocalizedString(@"ActionSheet_Email", @""),nil];

if (IS_DEVICE_IPAD) {
    [actionSheetShare showFromBarButtonItem:sender animated:YES];
}else {
    [actionSheetShare showInView:self.view];
}
}
于 2012-06-10T07:13:03.083 に答える
0

あなたの問題はshowFromRect、四角形が画面全体で使用していることです。これは、ポップアップが「矢印」を画面の中央に配置するのに最適であることを意味します。あなたが望むのは、ボタンshowFromBarButtonItemの四角形( )に渡すか、どちらかです。self.shareButtonItem.frame

于 2012-06-09T22:40:53.840 に答える
0

[sheet showFromRect] の代わりに [sheet showFromBarButtonItem] を使用し、Share UIBarButtonItem をポイントします。注: UIBarButtonItem の IBOutlet または ivar をまだ作成していない場合は、作成する必要があるかもしれませんが、それは非常に簡単で、できると思います。

于 2012-06-09T22:39:55.827 に答える