【问题标题】:How to display NSArray objects in the buttons of a UIActionSheet如何在 UIActionSheet 的按钮中显示 NSArray 对象
【发布时间】:2013-09-16 12:02:10
【问题描述】:

我正在尝试使用来自NSArray 的结果填充UIActionSheet 按钮列表。我有 cityTitleNodeArray,它是一个 NSArraynslog 下面的输出)。目前它只显示NSArray 中的第一项作为UIActionSheet 中的第一个按钮

我希望它看起来像这样(除了数组信息应该都来自 cityTitleNodeArray):

   NSArray *array = [[NSArray alloc] initWithObjects: cityTitleNodeArray, @"city2", @"city3", @"city4", @"city5", @"city6", @"city7", @"city8",@"city9", @"city10", @"city11", @"city12", @"city13", @"city14", @"city15", @"city16", nil];


    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                             delegate:self
                                                    cancelButtonTitle:nil
                                               destructiveButtonTitle:nil
                                                    otherButtonTitles:nil];

    for (NSString *title in array) {
        [actionSheet addButtonWithTitle:title];
    }

    [actionSheet addButtonWithTitle:@"Cancel"];
    actionSheet.cancelButtonIndex = [array count];

    [actionSheet showInView:self.view];




  -(void)requestCityData {

 NSError *requestError = nil;

 NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"token"];

 NSString *stringWithToken = [NSString stringWithFormat:@"%@&token=%@",kCityURL, savedValue];

 NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:stringWithToken]];

 NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:&requestError];

 NSError *jsonParsingError = nil;

 if (requestError) {
 NSLog(@"sync. request failed with error: %@", requestError);
 }
 else {
 // handle data
 NSDictionary *publicData =  [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError];

     publicCityDataArray = [publicData objectForKey:@"data"];

     for (NSDictionary *publicCityDataDict in publicCityDataArray) {

         cityTitleNodeArray = [publicCityDataDict objectForKey:@"name"];
         NSLog(@"cityTitleNodeArray from requestCityData output is %@",cityTitleNodeArray);

     }

 }

}

cityTitleNodeArray 输出为:

`cityTitleNodeArray` from `requestCityData` output is Roma
2013-09-16 12:49:28.001 1000 [3980:907] cityTitleNodeArray from requestCityData output is Milano
2013-09-16 12:49:28.002 1000 [3980:907] cityTitleNodeArray from requestCityData output is Rimini
2013-09-16 12:49:28.002 1000 [3980:907] cityTitleNodeArray from requestCityData output is Venezia
2013-09-16 12:49:28.003 1000 [3980:907] cityTitleNodeArray from requestCityData output is Firenze
2013-09-16 12:49:28.003 1000 [3980:907] cityTitleNodeArray from requestCityData output is Napoli

【问题讨论】:

    标签: iphone ios nsarray uiactionsheet


    【解决方案1】:
    NSArray *array = [[NSArray alloc] initWithObjects:
                     @"1st Button",
                     @"2nd Button",
                     @"3rd Button",
                     @"4th Button",
                     nil];
    
    UIActionSheet* actionSheet = [[UIActionSheet alloc] init];
    
    actionSheet.title = @"Cities Name";
    
    actionSheet.delegate = self;
    
    for(int i=0;i<[array count];i++)
    
    {
    
    [actionSheet addButtonWithTitle:[array objectAtIndex:i]];
    
    }
    
    actionSheet.cancelButtonIndex = [actionSheet addButtonWithTitle:@"Cancel"];
    
    [actionSheet showInView:[UIApplication sharedApplication].keyWindow];
    

    【讨论】:

    • 谢谢,但这并没有用我拥有的城市数据数组 (cityTitleNodeArray) 填充按钮名称。
    • 你能确定你分配了你的数据数组吗?您打印并检查数组不为空。
    • cityTitleNodeArray 是什么 如果你使用这个数组然后你使用 NSArray *array = [[NSArray alloc] initWithArray:cityTitleNodeArray];
    【解决方案2】:

    用于从数组中设置按钮的标题

    UIActionSheet *actionSheet=[[UIActionSheet alloc]initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" 破坏性ButtonTitle:nil otherButtonTitles:[array objectAtIndex:0],[array objectAtIndex:1],[array objectAtIndex: 2], 无];

    [actionSheet showInView:self.view];
    

    在委托方法中

    pragma mark Action Sheet 委托方法

    -(void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{

    switch (buttonIndex) {
        case 0:
        { 
            //Actions on pressing Button 1
        }
    
            
        
            break;
            
        case 1:
        {
     //Actions on pressing Button 2
        }
            break;
            
        case 2:
        {
          //Actions on pressing Button 3
        }
            break;
            
        default:
            break;
    }
    

    }

    【讨论】:

      【解决方案3】:

      试试这个

      NSArray *array = [[NSArray alloc] initWithObjects:
                            [NSString stringWithString:@"1st Button"],
                            [NSString stringWithString:@"2nd Button"],
                            [NSString stringWithString:@"3rd Button"],
                            [NSString stringWithString:@"4th Button"],
                            nil];
      UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@"Title Here"
                                                               delegate:self
                                                      cancelButtonTitle:nil
                                                 destructiveButtonTitle:nil
                                                      otherButtonTitles:nil];
      
      // ObjC Fast Enumeration
      for (NSString *title in array) {
          [actionSheet addButtonWithTitle:title];
      }
      
      [actionSheet addButtonWithTitle:@"Cancel"];
      actionSheet.cancelButtonIndex = [array count];
      
      [actionSheet showInView:self.view];
      

      【讨论】:

      • 谢谢,但这并没有用我拥有的城市数据数组填充按钮名称。
      猜你喜欢
      • 2013-07-29
      • 1970-01-01
      • 2013-11-01
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      相关资源
      最近更新 更多