我试图子类UIAlertView,以便更好地处理我的应用程序中的错误状态。问题在于,当我创建子类时,它只是获取列表中的第一个字符串,而不是所有字符串。
+ (ErrorAlertView *)displayErrorAlertViewWithTitle:(NSString *)title
message:(NSString *)message
delegate:(id<UIAlertViewDelegate>)delegate
errorDelegate:(id<ErrorAlertViewDelegate>)errorDelegate
cancelButtonTitle:(NSString *)cancelButtonTitle
displayNow:(BOOL)displayNow
tag:(NSUInteger)tag
otherButtonTitles:(NSString *)otherButtonTitles, ...;
{
ErrorAlertView *errorAlertView = [[ErrorAlertView alloc] initWithTitle:title
message:message
delegate:delegate
cancelButtonTitle:cancelButtonTitle
otherButtonTitles:otherButtonTitles, nil];
errorAlertView.errorDelegate = errorDelegate;
errorAlertView.tag = tag;
if (displayNow) {
[errorAlertView show];
}
return [errorAlertView autorelease];
}如果我按以下方式调用上述方法:
[ErrorAlertView displayErrorAlertViewWithTitle:[self noInternetConnectionAlertViewTitle]
message:[self noInternetConnectionAlertViewMessage]
delegate:self
errorDelegate:errorDelegate
cancelButtonTitle:@"OK"
displayNow:YES
tag:ErrorAlertTagInternetConnectionError
@"Try again",@"Setting", nil];UIAlertView只显示@“重试”按钮。
发布于 2011-11-29 11:24:43
您不能发送这样的变量集。
当我子类UIAlertView时,我这样做了:
va_list args;
va_start(args, otherButtonTitles);
for (NSString *anOtherButtonTitle = otherButtonTitles; anOtherButtonTitle != nil; anOtherButtonTitle = va_arg(args, NSString*)) {
[self addButtonWithTitle:anOtherButtonTitle];
}或者,您可以创建一个接受va_list作为(单个)参数的函数的变体,然后运行上面的代码。
通常,在编写变量函数时,您应该包括一个处理这种可能性的备选方案。在这种情况下,苹果提供了addButtonWithTitle:方法。
发布于 2011-11-29 11:39:04
来自UIAlertView类引用
子类Notes UIAlertView类打算以原样形式使用,而不支持子类化。此类的视图层次结构是私有的,不能修改。
但是,还有许多其他警告视图实现,您可能会发现这些实现很有用,发布了在CocoaControls上。
发布于 2015-02-18 22:31:41
与其子类UIAlertView,我更喜欢创建简单的类,这些类通常只有一个接受委托参数的show方法。然后,委托协议具有与可用选项相对应的表示方法。
虽然与典型的警报视图委托方法相比,这种方法带来了更多的委托功能,但我认为它使代码的可读性大大提高。
代码通常如下所示(Swift):
@objc protocol DeleteUniverseAlertViewDelegate {
func deleteUniverseAlertViewDidConfirmDelete(view: DeleteUniverseAlertView)
}
class DeleteUniverseAlertView : NSObject, UIAlertViewDelegate {
private weak var delegate: DeleteUniverseAlertViewDelegate? = nil
class func showWithDelegate(delegate: DeleteUniverseAlertViewDelegate) -> DeleteUniverseAlertView {
let view = DeleteUniverseAlertView()
view.delegate = delegate
UIAlertView(title: "Delete universe?", message: "Are you really, really sure about this?", delegate: view, cancelButtonTitle: "Cancel", otherButtonTitles: "Yes, delete!").show()
return view
}
func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) {
if (buttonIndex > 0) {
delegate?.deleteUniverseAlertViewDidConfirmDelete(self)
}
}
}当您需要显示此警报时,只需实现协议并像下面这样显示自定义警报(记住要保持对警报视图的强烈引用):
deleteAlert = DeletePlaceAlertView.showWithDelegate(self)https://stackoverflow.com/questions/8309869
复制相似问题