首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >子类UIAlertView

子类UIAlertView
EN

Stack Overflow用户
提问于 2011-11-29 11:20:10
回答 3查看 5.3K关注 0票数 1

我试图子类UIAlertView,以便更好地处理我的应用程序中的错误状态。问题在于,当我创建子类时,它只是获取列表中的第一个字符串,而不是所有字符串。

代码语言:javascript
复制
+ (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];


}

如果我按以下方式调用上述方法:

代码语言:javascript
复制
[ErrorAlertView displayErrorAlertViewWithTitle:[self noInternetConnectionAlertViewTitle] 
                                           message:[self noInternetConnectionAlertViewMessage] 
                                          delegate:self 
                                     errorDelegate:errorDelegate 
                                 cancelButtonTitle:@"OK" 
                                        displayNow:YES 
                                               tag:ErrorAlertTagInternetConnectionError 
                                 @"Try again",@"Setting", nil];

UIAlertView只显示@“重试”按钮。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-29 11:24:43

您不能发送这样的变量集。

当我子类UIAlertView时,我这样做了:

代码语言:javascript
复制
va_list args;
va_start(args, otherButtonTitles);
for (NSString *anOtherButtonTitle = otherButtonTitles; anOtherButtonTitle != nil; anOtherButtonTitle = va_arg(args, NSString*)) {
    [self addButtonWithTitle:anOtherButtonTitle];
}

或者,您可以创建一个接受va_list作为(单个)参数的函数的变体,然后运行上面的代码。

通常,在编写变量函数时,您应该包括一个处理这种可能性的备选方案。在这种情况下,苹果提供了addButtonWithTitle:方法。

票数 5
EN

Stack Overflow用户

发布于 2011-11-29 11:39:04

来自UIAlertView类引用

子类Notes UIAlertView类打算以原样形式使用,而不支持子类化。此类的视图层次结构是私有的,不能修改。

但是,还有许多其他警告视图实现,您可能会发现这些实现很有用,发布了在CocoaControls上

票数 14
EN

Stack Overflow用户

发布于 2015-02-18 22:31:41

与其子类UIAlertView,我更喜欢创建简单的类,这些类通常只有一个接受委托参数的show方法。然后,委托协议具有与可用选项相对应的表示方法。

虽然与典型的警报视图委托方法相比,这种方法带来了更多的委托功能,但我认为它使代码的可读性大大提高。

代码通常如下所示(Swift):

代码语言:javascript
复制
@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)
        }
    }
}

当您需要显示此警报时,只需实现协议并像下面这样显示自定义警报(记住要保持对警报视图的强烈引用):

代码语言:javascript
复制
deleteAlert = DeletePlaceAlertView.showWithDelegate(self)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8309869

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档