Objective c iOS iPad操作单问题

Objective c iOS iPad操作单问题,objective-c,ios,uipopovercontroller,uiactionsheet,Objective C,Ios,Uipopovercontroller,Uiactionsheet,我目前正在开发一个应用程序,它需要一个使用多种服务“共享”的选项;比如电子邮件,推特 为此,我有一个UIBarButtonItem编码,当触碰它时,它会触发: UIActionSheet *sheet = [[UIActionSheet alloc] initWithTitle:@"" delegate:self cancelB

我目前正在开发一个应用程序,它需要一个使用多种服务“共享”的选项;比如电子邮件,推特

为此,我有一个
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,但我似乎不知道如何使用按钮。无论如何,我可以修改上面的代码来正确显示按钮,因为它已经在尝试

非常感谢,

瑞安

附言:我是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;
@接口详细信息ViewController:UIViewController{
伊巴布托教派*份额;
}
@不动产(非原子,保留)IBUIBarbuttonite*份额;
以下是调试错误:

由于未捕获异常而终止应用程序 “NSInvalidArgumentException”,原因:“*-[\uu NSPlaceholderArray” initWithObjects:count::尝试从对象[0]插入nil对象'


使用[sheet showFromBarButtonItem]代替[sheet showFromRect],并将其指向您的共享UIBarButtonItem。
注意:如果您还没有iBarButtonim,您可能需要为您的iBarButtonim创建一个IBOutlet或ivar,但这非常简单,我猜您可以这样做。

使用[sheet ShowFromBarButtonim]代替[sheet showFromRect],并将其指向您的共享iBarButtonim。
注意:如果您还没有UIBarButtonItem,您可能需要为您的UIBarButtonItem创建一个IBOutlet或ivar,但这非常简单,我猜您可以这样做。

您的问题是您使用的是
showFromRect
,而rect是整个屏幕。这意味着弹出窗口正在尽可能地将“箭头”置于屏幕中央。您需要的是
showFromBarButtonItem
或传入按钮的矩形(
self.shareButtonItem.frame
)。

您的问题是使用的是
showFromRect
,矩形是整个屏幕。这意味着弹出窗口正在尽可能地将“箭头”置于屏幕中央。您需要的是
从BarbuttonItem中显示
,或者传入按钮的rect(
self.shareButtonItem.frame

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


您好,使用此“[sheet showFromBarButtonItem]”,它会显示此警告,如果被触碰也会崩溃:未找到实例方法“-showFromBarButtonItem”(返回类型默认为“id”)。您需要将UIBarButtonItem传递到此方法。阅读它的文档。我的代码只是一个提示,不是一个完整的语句。嗨,请看我的编辑。我已经这样做了,但是有一个错误。Thanks@melsam,您好,如何向右/向左移动?我的箭头没有集中在Balbuton项的中间(水平中间),如果我使用这个“[从ButButnIOTION项目中的表显示]显示SuffFoButoNoTimeHi),它会显示这个警告,并且如果被触碰也会崩溃:实例方法“Sun-ButButOnTION”没有找到(返回类型默认值为“ID”)。您需要将您的UIButButOnIt项传递给该方法。阅读它的文档。我的代码只是一个提示,不是一个完整的语句。嗨,请看我的编辑。我已经这样做了,但是有一个错误。Thanks@melsam,您好,如何向右/向左移动?我的箭头不在Balbuton项的中间(水平中间),如果我使用SavaBoButoNoTimi,谢谢你的回答。但是使用“[sheet showFromRect:self.shareButtonItem.frame-inView:self.view-animated:YES];”我得到错误:在“DetailViewController*”类型的对象上找不到属性“shareButtonItem”。我也试过Melsam的回答中的“[sheet Showfrom Barbuttonite]”,但没有成功。嗨,谢谢你的回答。但是使用“[sheet showFromRect:self.shareButtonItem.frame-inView:self.view-animated:YES];”我得到错误:在“DetailViewController*”类型的对象上找不到属性“shareButtonItem”。我也试过Melsam的回答中的“[巴布顿主义的床单展示]”,但没有成功。
-(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];
}
}