2010-01-17 2 views
3

Как использовать tableView в качестве селектора значений?Как использовать UITableView для возврата значения

Таким образом, у меня есть ряд полей ввода, и я хочу, когда вы выбираете поле цетиана, оно открывает табличное представление параметров, которые вы можете выбрать из значения для этого поля. После выбора опции он возвращается к предыдущему виду с выбранным значением, заполняющим это поле.

ответ

6

Это то, что я делаю, аналогично настройкам> Общие> Международные> Таблицы языков в iPhone/iPod.

table view http://i48.tinypic.com/15sanh3.jpg

Пользователь может нажать на строку и флажок появится. Вид отклоняется при нажатии «Готово» или «Отмена».

Сначала создайте UITableViewController, который отобразит ваши варианты. У вас есть панель инструментов сверху с помощью кнопки «Отмена» и «Готово». Также эти свойства:

SEL selector; // will hold the selector to be invoked when the user taps the Done button 
id target;  // target for the selector 
NSUInteger selectedRow; // hold the last selected row 

Этот вид будут представлены с помощью метода presentModalViewController:animated:, чтобы он отображался в нижней части экрана. Вы можете представить его каким-либо другим способом, но это похоже на стандарт для приложений iPhone.

Перед представлением представления установите target и selector, поэтому метод будет вызываться, когда пользователь нажимает кнопку «Готово».

Теперь, вновь созданный UITableViewController you can implement the the Tableview: didSelectRowAtIndexPath: `Способ:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 

    UITableViewCell * cell = [self.tableView cellForRowAtIndexPath:indexPath]; 
    cell.accessoryType = UITableViewCellAccessoryCheckmark; // show checkmark 
    [cell setSelected:NO animated:YES];      // deselect row so it doesn't remain selected 
    cell = [self.tableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:selectedRow inSection:0]];  
    cell.accessoryType = UITableViewCellAccessoryNone;  // remove check from previously selected row 
    selectedRow = indexPath.row;        // remember the newly selected row 
} 

также осуществлять отменяют и Молодцы методы для кнопок на панели инструментов:

- (IBAction)done:(UIBarButtonItem *)item 
{ 
    [target performSelector:selector withObject:[stringArray objectAtIndex:selectedRow]]; 
    [self dismissModalViewControllerAnimated:YES]; 
} 

- (IBAction)cancel:(UIBarButtonItem *)item 
{ 
    [self dismissModalViewControllerAnimated:YES]; 
} 
+0

Wow Большое спасибо за это, на самом деле nice implementation – Affian

+0

Это работает для меня, но есть проблема, когда вы нажимаете на одну и ту же строку более одного раза. Технически он продолжает добавлять и удалять галочку из той же строки, а то, что вы видите, - nocheckmark. Чтобы решить эту проблему, просто добавьте это условие в начало tableView: didSelectRowAtIndexPath: if (selectedRow! = IndexPath.row) {} – Kamel

1

, помните значение где-нибудь в другом объекте (возможно, экземпляр экземпляра/синглтон, возможно, - в зависимости от вашей архитектуры), а затем отклоните этот вид таблицы.

1

Я внедрил ViewController для выбора даты. Я создаю протокол, чтобы вернуть дату, выбранную в предыдущее представление.

@protocol DataViewDelegate 
@optional 
- (void)dataViewControllerDidFinish:(NSDate*)dateSelected; 
@end 

...

- (void) viewDidDisappear:(BOOL)animated 
{ 
    if ([ (id)(self.delegate) respondsToSelector:@selector(dataViewControllerDidFinish:)]) 
    { 
     [self.delegate dataViewControllerDidFinish:self.data]; 
    } 

    [super viewDidDisappear:animated]; 
} 

В селекторе просмотра вы можете использовать

tableView:didSelectRowAtIndexPath: 

выбрать строку, которую вы хотите. Здесь я устанавливаю свойство data.

Предыдущее представление является делегатом для протокола.

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