这可能是iOS7上的一个错误。但是最后一个按钮与前一个按钮
没有分开从图像中可以看出。使用iOS7 GM在Simulator和设备上都会发生这种情况。 其他人是否都有同样的问题?
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Title"
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles:@"First", @"Second", @"Third", @"Fourth", nil];
[actionSheet showInView:self.view];
正如您所看到的,代码非常简单。 有关如何解决问题的任何想法?或者我可以使用一些第三方库而不是UIActionSheet?
答案 0 :(得分:24)
我认为ActionSheet 需要取消按钮。所以你可以添加取消按钮标题。
另一种方法是:指定actionSheet的cancelButtonIndex。
例如,在您的情况下,您可以在索引4处的otherButtonTitles中添加“取消”,然后指定 actionSheet.cancelButtonIndex = 4。
答案 1 :(得分:8)
我找到了一种方法,可以用最简单的方式在iPhone和iPad上运行:
我认为缺少的分隔符是由首次添加或通过init添加取消按钮时未被识别为单独的情况引起的。
答案 2 :(得分:6)
我发现初始化后添加一个带空字符串的取消按钮。取消按钮不会显示,分隔符显示。
[sheet addButtonWithTitle: @""];
[sheet setCancelButtonIndex: sheet.numberOfButtons - 1];
但这仅适用于iPad。在iPhone上,显示一个空取消按钮,但我发现了一个hacky解决方法,使其工作。除上述内容外,在willPresentActionSheet
中添加以下代码:
NSInteger offset = 55;
CGRect superFrame = actionSheet.superview.frame;
superFrame.origin.y += offset;
[actionSheet.superview setFrame: superFrame];
// hide underlay that gets shifted with the superview
[(UIView*)[[actionSheet.superview subviews] objectAtIndex: 0] removeFromSuperview];
// create new underlay
CGRect underlayFrame = CGRectMake(0, -offset, superFrame.size.width, superFrame.size.height);
UIView* underlay = [[UIView alloc] initWithFrame: underlayFrame];
underlay.alpha = 0.0f;
[underlay setBackgroundColor: [UIColor colorWithWhite: 0.0f alpha: 0.4f]];
[actionSheet.superview insertSubview: underlay atIndex: 0];
// simulate fade in
[UIView animateWithDuration: 0.3f animations:^{
underlay.alpha = 1.0f;
}];
这会向下移动工作表以隐藏屏幕上的取消按钮
答案 3 :(得分:5)
最简单的解决方法是在分配期间将@""
传递给取消按钮标题,而不是nil
。
UIActionSheet *actionSheet = [[UIActionSheet alloc]
initWithTitle:@"Title"
delegate:self
cancelButtonTitle:@"" // change is here
destructiveButtonTitle:nil
otherButtonTitles:@"First", @"Second", @"Third", @"Fourth", nil];
[actionSheet showInView:self.view];
答案 4 :(得分:3)
UIActionSheet *asAccounts = [[UIActionSheet alloc]
initWithTitle:Localized(@"select_an_account")
delegate:self
cancelButtonTitle:nil
destructiveButtonTitle:nil
otherButtonTitles: nil];
for (int i=0; i<[result count]; i++) {
ACAccount *acct = [result objectAtIndex:i];
[asAccounts addButtonWithTitle:[acct username]];
asAccounts.tag = i;
}
[asAccounts addButtonWithTitle:Localized(@"Cancel")];
asAccounts.cancelButtonIndex = result.count;
[asAccounts showInView:self.view];
答案 5 :(得分:1)
如果您有取消按钮,将显示最后一行。这就是我现在正在使用的临时解决方案。如果您不想显示取消按钮
,请不要知道任何解决方案答案 6 :(得分:0)
似乎 initWithTitle:delegate:cancelButtonTitle:destructiveButtonTitle:otherButtonTitles:方法是错误的,你根本不应该在这里指定任何取消按钮。顺便说一句,似乎该方法中设置的破坏性按钮也无法正常工作。
而不是它应该:
["Action 1", "Action 2", "Close"]
或sheet.addButtonWithTitle("Close")
sheet.cancelButtonIndex = 2
然后一切都会按预期工作。在iPad上,按钮将自动隐藏,并且在iPhone上将按照正确的方式进行样式设置。
答案 7 :(得分:0)
- (void)willPresentActionSheet:(UIActionSheet *)actionSheet {
if ([UIDevice currentDevice].systemVersion.floatValue < 8.0f) {
UIView *separator = [[UIView alloc] initWithFrame:CGRectMake(8, 88, actionSheet.frame.size.width - 16, 0.5)];
separator.backgroundColor = [UIColor colorWithRed:219.0f/255 green:219.0f/255 blue:223.0f/255 alpha:1];
[actionSheet addSubview:separator];
}
}
每个按钮都有高度44.我的actionSheet没有标题。我想在第二个和第三个按钮之间添加分隔符。这就是我使用88号的原因。