2013-04-09 27 views
-4

我试过下面的代码,但只有otherButtonTitles的第一个出现。argumentList只显示一个

- (id)initWithCancelButtonTitle:(NSString *)cancelButtonTitle primaryButtonTitle:(NSString *)primaryButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... 
{ 
    self = [self init]; 
    if (self) 
    { 
     // Build normal buttons 
     va_list argumentList; 
     va_start(argumentList, otherButtonTitles); 

     NSString *argString = otherButtonTitles; 

     while (argString != nil) 
     { 
      UIButton *button = [self buildButtonWithTitle:argString]; 

      [self.buttons addObject:button]; 

      argString = va_arg(argumentList, NSString *); 
     } 

     va_end(argumentList); 

     // Build cancel button 
     UIButton *cancelButton = [self buildCancelButtonWithTitle:cancelButtonTitle]; 
     [self.buttons insertObject:cancelButton atIndex:0]; 

     // Add primary button 
     if (primaryButtonTitle) 
     { 
      UIButton *primaryButton = [self buildPrimaryButtonWithTitle:primaryButtonTitle]; 
      [self.buttons addObject:primaryButton]; 
     } 

     // Add destroy button 
     if (destructiveButtonTitle) 
     { 
      UIButton *destroyButton = [self buildDestroyButtonWithTitle:destructiveButtonTitle]; 
      [self.buttons insertObject:destroyButton atIndex:1]; 
     } 
    } 

    return self; 
} 

如何修改?

+0

如果您创建函数超过2-3的说法,我建议你创建一个字典作为该方法的参数和以前的说法应该是成员那本字典。因此,您的代码将易于阅读和维护良好 – Tirth 2013-04-09 10:13:49

+0

我想知道我的代码为什么只给第一个。谢谢你的回答 – pengwang 2013-04-09 10:19:16

+0

:D我还没有回答。我只是给你建议。 – Tirth 2013-04-09 10:21:27

回答

1

这里是我为你写的一般模板。它像一个有着各种参数的魅力一样工作。我认为它可以帮助您解决您轻松的问题:

.H文件

- (NSMutableArray *)arrayWithDictionaries:(NSDictionary *)dictionary, ... NS_REQUIRES_NIL_TERMINATION; 

.M文件

- (NSMutableArray *)arrayWithDictionaries:(NSDictionary *)dictionary, ... { 
    NSMutableArray *_array = [[NSMutableArray alloc] init]; 

    // I'm building the array of the arguments 
    va_list _arguments; 
    va_start(_arguments, dictionary); 

    for (NSDictionary *_currentArgument = dictionary; _currentArgument != nil; _currentArgument = va_arg(_arguments, NSDictionary*)) { 
     [_array addObject:_currentArgument]; 
    } 

    va_end(_arguments); 

    return _array; 
} 

更新#1(在090413)

这里是你的代码......

.H文件

- (id)initWithCancelButtonTitle:(NSString *)cancelButtonTitle primaryButtonTitle:(NSString *)primaryButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... NS_REQUIRES_NIL_TERMINATION; 

.M文件

- (id)initWithCancelButtonTitle:(NSString *)cancelButtonTitle primaryButtonTitle:(NSString *)primaryButtonTitle destructiveButtonTitle:(NSString *)destructiveButtonTitle otherButtonTitles:(NSString *)otherButtonTitles, ... 
{ 
    self = [self init]; 
    if (self) 
    { 
     // Build normal buttons 
     va_list _arguments; 
     va_start(_arguments, otherButtonTitles); 

     for (NSString *_currentArgument = otherButtonTitles; _currentArgument != nil; _currentArgument = va_arg(_arguments, NSString*)) { 
      UIButton *button = [self buildButtonWithTitle:_currentArgument]; 
      [self.buttons addObject:button]; 
     } 

     va_end(_arguments); 

     // Build cancel button 
     UIButton *cancelButton = [self buildCancelButtonWithTitle:cancelButtonTitle]; 
     [self.buttons insertObject:cancelButton atIndex:0]; 

     // Add primary button 
     if (primaryButtonTitle) 
     { 
      UIButton *primaryButton = [self buildPrimaryButtonWithTitle:primaryButtonTitle]; 
      [self.buttons addObject:primaryButton]; 
     } 

     // Add destroy button 
     if (destructiveButtonTitle) 
     { 
      UIButton *destroyButton = [self buildDestroyButtonWithTitle:destructiveButtonTitle]; 
      [self.buttons insertObject:destroyButton atIndex:1]; 
     } 
    } 

    return self; 
} 

更新#2(在090413)

你应该这样调用方法:

[[... alloc] initWithCancelButtonTitle:@"Cancel Title" primaryButtonTitle:@"Primary Title" destructiveButtonTitle:@"Destructive Title" otherButtonTitles:@"Other Title 1", @"Other Title 2", @"Other Title 3", nil]; 
+0

如何使用我的方法的方法? – pengwang 2013-04-09 11:23:34

+0

你不看高手来实现一个功能,呵呵?但没有问题,我已经为你做了,检查我的更新的答案... – holex 2013-04-09 11:30:28

+0

谢谢,我明天会检查它。 – pengwang 2013-04-09 11:41:44