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];
}
}