2013-08-26 3 views
1

У меня есть UIActionSheet. Он отображает название из массива. Когда я нажимаю кнопку, ничего не произойдет. Я также использовал NSLog. Но это ничего не показывает. Название кнопки отображается из массива. Но только щелчок не работаетКнопка UIActionSheet не работает

код:

ActionSheet:

TSActionSheet *actionSheet = [[TSActionSheet alloc] initWithTitle:@"Design"]; 

     for (int i = 0; i<[catearray count]; i++) { 

      [actionSheet addButtonWithTitle:[catearray objectAtIndex:i] block:^{ 





       }]; 

     } 

нажатие кнопки:

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

     NSLog(@"button"); 



    } else if (buttonIndex == 1) { 

     NSLog(@"button 1"); 


    } else if (buttonIndex == 2) { 


      NSLog(@"button 2"); 

    } else if (buttonIndex == 3) { 

    } 





} 

Массив:

if (sqlite3_open([path UTF8String], &database) == SQLITE_OK) { 

      const char *sql = "SELECT id,cat_name FROM categories"; 

      NSLog(@"sql is %s",sql); 

      sqlite3_stmt *statement; 
      // int catID = 0; 
      if (sqlite3_prepare_v2(database, sql, -1, &statement, NULL) == SQLITE_OK) { 
       // We "step" through the results - once for each row. 
       while (sqlite3_step(statement) == SQLITE_ROW) { 


        category = [[NSString alloc] initWithUTF8String: 
           (const char *) sqlite3_column_text(statement, 1)]; 
        NSLog(@"catName is %@",category); 

        [catearray addObject:category]; 


        // catID = sqlite3_column_int(statement, 0); 
       } 
      } 


      sqlite3_finalize(statement); 
     } 

     else { 
      sqlite3_close(database); 
      NSAssert1(0, @"Failed to open database with message '%s'.", sqlite3_errmsg(database)); 
      // Additional error handling, as appropriate... 
     } 
+0

Вам необходимо установить делегат, чтобы методы делегата работали. – Desdenova

+0

Как? Im использует TSPopoverActionsheet. Это третья сторона. Если я использую отдельную кнопку, она работает. Я использую массив, он не работает – user2674668

ответ

1

Вы используете библиотеку под названием TSActionSheet и действия не вызывается по умолчанию в UIActionSheetDelegate

так и есть, чтобы переместить действие к способу, как этот

-(void)actionSheetClickedButtonAtIndex:(int)buttonIndex { 

    if (buttonIndex == 0) { 
     NSLog(@"button"); 



    } else if (buttonIndex == 1) { 

     NSLog(@"button 1"); 


    } else if (buttonIndex == 2) { 


      NSLog(@"button 2"); 

    } else if (buttonIndex == 3) { 

    } 
} 

затем вызвать этот метод ваш блок, подобный этому

TSActionSheet *actionSheet = [[TSActionSheet alloc] initWithTitle:@"Design"]; 

     for (int i = 0; i<[catearray count]; i++) { 

      [actionSheet addButtonWithTitle:[catearray objectAtIndex:i] block:^{ 

        [self actionSheetClickedButtonAtIndex:i]; 



       }]; 

     } 
+0

Работает. спасибо – user2674668

+0

[catearray objectAtIndex: i] поступает из webservice. Если массив увеличивается, как установить buttonIndex? Если у меня есть catearray с 2 кнопками. поэтому я использую buttonIndex 0,1. После публикации приложения, я увеличиваю массив в webservice, как установить buttonIndex для этой обновленной кнопки – user2674668

+0

, пока кнопки u're используются для цикла ... будут установлены автоматически с инкрементным индексом ... 0,1,2,3 , 4,5,6, ... и т.д.. но у вас нужно обрабатывать новые функции кнопок в функции actionSheetClickedButtonAtIndex, чтобы сделать правильное действие. –

1

Нет, вы не используя UIActionSheet, вы петь TSActionSheet, который не является подклассом UIActionSheet (It's a subclass of UIView), поэтому нет ожиданий для реализации протокола UIActionSheetDelegate. Обратите внимание, что при добавлении кнопки в ваш TSActionSheet один из параметров, переданных кнопке, является блоком. Здесь вы помещаете код, который хотите выполнить при нажатии кнопки.

[actionSheet addButtonWithTitle:@"button one" color:[UIColor whiteColor] titleColor:[UIColor darkGrayColor] borderWidth:1 borderColor:[UIColor grayColor] block:^{ 
     NSLog(@"pushed button one"); 
}]; 
+0

[catearray objectAtIndex: i] поступает из webservice. Если массив увеличивается, как установить buttonIndex? Если у меня есть catearray с 2 кнопками. поэтому я использую buttonIndex 0,1. После публикации приложения, я увеличиваю массив в webservice, как установить buttonIndex для этой обновленной кнопки – user2674668

Смежные вопросы