此代码在iPhone上运行正常,但在iPad上,操作表显示在屏幕中间。不在触发按钮所在的角落。此外,没有取消按钮显示。
此外,该应用仅处于横向模式。相机触发按钮位于屏幕的右上角。
mediaPicker = [[UIImagePickerController alloc] init];
mediaPicker.allowsEditing = YES;
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Take photo", @"Choose Existing", nil];
//[actionSheet showInView:self.view];
[actionSheet showInView:self.navigationController.view];
}
// If device doesn't has a camera, Only "Choose Existing" and "Cancel" options will show up.
else {
UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:nil
delegate:self
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:nil
otherButtonTitles:@"Choose Existing", nil];
[actionSheet showInView:self.view];
}
我需要动作表来显示按钮的位置。我应该怎么做呢。
答案 0 :(得分:8)
IPAD对actionsheets
及其取消按钮有一些特殊规则,通常取决于您从<{p>}显示actionsheets
的位置
您可以显示UIToolbar
,UITabBar
,UIBarButtonItem
或UIView
中的操作表。在确定如何呈现操作表时,此类将起始视图和当前平台考虑在内。对于在iPhone和iPod touch设备上运行的应用程序,操作表通常从拥有视图的窗口底部向上滑动。 对于在iPad设备上运行的应用程序,操作表通常显示在以适当方式锚定到起始视图的弹出框中。弹出窗口外的点击会自动关闭操作表,任何自定义按钮内的点击都会自动关闭。您也可以通过编程方式解除它。
在iPad上显示操作表时,有时您不应包含取消按钮。如果仅显示操作表,系统将在不使用动画的情况下在弹出框中显示操作表。由于弹出窗口外的水龙头在不选择项目的情况下关闭操作表,因此这将导致取消工作表的默认方式。因此,包括取消按钮只会引起混淆。但是,如果您有一个现有的弹出框并且正在使用动画在其他内容上显示一个操作表,则取消按钮仍然是合适的
而不是使用showInView
尝试使用其中一种方法
[actionSheet showFromBarButtonItem:barItem animated:YES];
答案 1 :(得分:2)
在iPad上,请勿使用showInView:
。相反,请使用其他一种更具体的方法来显示操作表,例如showFromBarButtonItem:animated:
。
如nsgulliver的回答所述,动作表不能在iPad上显示“取消”按钮是正常的。用户需要做的只是在操作表外部点击。这与取消相同。