AlertView 的 init 方法中的参数

Posted

技术标签:

【中文标题】AlertView 的 init 方法中的参数【英文标题】:Parameters in the init method of a AlertView 【发布时间】:2011-10-29 04:38:41 【问题描述】:

我想知道是否有一种方法可以在不同于 initWithTitle 的 UIAlertView 的构造函数中传递参数。特别是我想传递一个 NSArray。是否可以? 这是代码:

@implementation UIAlertTableView


- (id)initWithFrame:(CGRect)frame 
if (self = [super initWithFrame:frame]) 


    array=[NSArray arrayWithObjects:@"Capitaliz. semplice",@"Capitaliz. composta",@"Pagamenti rateali",@"Bond", nil];

    table = [[UITableView alloc] initWithFrame:CGRectZero  style:UITableViewStylePlain];

    table.delegate=self;
    table.dataSource=self;


    [self addSubview:table];

return self;

谢谢

【问题讨论】:

我没有在该代码中看到您对 UIAlertView 的调用 - 只有数组的创建... 你想在警报视图中传递一个按摩字符串(这就是我们所做的一切),是的,你可以轻松传递。 你希望警报视图如何处理这个数组? 你最终找到答案了吗? 【参考方案1】:

每当您问自己这样的问题时,请搜索“[UIClassName] 类参考”

UIAlertView 类参考:

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIAlertView_Class/UIAlertView/UIAlertView.html

它的 init 需要一个 NSString,而不是一个字符串数组:

- (id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate     cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ...

【讨论】:

你可以重写方法initWithTitle?! 您可以使用自己的方法继承和扩展它,也可以使用类别进行扩展。您不能覆盖,因为这意味着具有覆盖实现的相同签名【参考方案2】:

我解决了,还是谢谢:

#import "UIAlertTableView.h"



@implementation UIAlertTableView

@synthesize tableSelected,fontSize;

- (id)initWithFrame:(CGRect)frame 
if (self = [super initWithFrame:frame]) 
    c=0;    

    table = [[UITableView alloc] initWithFrame:CGRectZero  style:UITableViewStylePlain];

    table.delegate=self;
    table.dataSource=self;


    [self addSubview:table];

return self;


- (void)setFrame:(CGRect)rect 
if (c==0) 
    c++; 
else if(c==1)
    if([tableSelected isEqualToString:@"categorie"])

        array=[NSArray arrayWithObjects:@"Capitalizzazione semplice",@"Capitalizzazione composta",@"Pagamenti rateali",@"Bond",  nil];

    else if([tableSelected isEqualToString:@"tassi"])

        array=[NSArray arrayWithObjects:
               @"Tasso effettivo annuo",
               @"Tasso effettivo mensile",
               @"Tasso effettivo bimestrale",
               @"Tasso effettivo trimestrale",
               @"Tasso effettivo quadrimestrale",
               @"Tasso effettivo semestrale",
               @"Tasso nominale convertibile mensilmente",
               @"Tasso nominale convertibile bimestralmente",
               @"Tasso nominale convertibile trimestralmente",
               @"Tasso nominale convertibile quadrimestralmente",
               @"Tasso nominale convertibile semestralmente",
               nil];

    else if([tableSelected isEqualToString:@"rate"])


        array=[NSArray arrayWithObjects:
               @"Rata annuale",
               @"Rata mensile",
               @"Rata bimestrale",
               @"Rata trimestrale",  
               @"Rata quadrimestrale",  
               @"Rata semestrale",  
               nil];
    [table reloadData];
    [table selectRowAtIndexPath:[NSIndexPath indexPathForRow:0 inSection:0] animated:NO scrollPosition:0];
    c++;

[super setFrame:CGRectMake(0, 0, rect.size.width, 300)];
self.center = CGPointMake(320/2, 480/2);


【讨论】:

【参考方案3】:

发帖人用另一种方式解决了他的问题。但是,是的,一个简单的类别将有效并且运作良好。可以这样实现。

-(id)initWithTitle:(NSString *)title message:(NSString *)message delegate:(id)delegate cancelButtonTitle:(NSString *)cancelButtonTitle otherButtonTitlesArray:(NSArray *)otherButtonTitles
    if ((self = [self initWithTitle:title message:message delegate:delegate cancelButtonTitle:cancelButtonTitle otherButtonTitles:nil]))
        for (NSString *buttonTitle in otherButtonTitles) 
            [self addButtonWithTitle:buttonTitle];
        
    
    return self;

此方法采用最终参数。 NSStrings 的数组并迭代地添加带有字符串标题的按钮。

【讨论】:

以上是关于AlertView 的 init 方法中的参数的主要内容,如果未能解决你的问题,请参考以下文章

如何将 TextField 和 CheckBox 添加到同一个 AlertView

代理参数问题的思考

alertView:(UIAlertView *) alertView 方法在 Appdelegate 中不起作用

iOS 8 中的 AlertView 问题

带有文本字段的 iphone alertview

Else 语句中的 AlertView