2012-04-19 3 views
1

У меня есть список имен в UITableView. Делегат tableView является viewController. Я использую IBAction вызвать UIAlertView (с текстовым полем), так что пользователь может добавить еще одно имя в Tableview:Как перезагрузитьДата в tableView при нажатии кнопки UIAlertView?

- (IBAction)addGuest:(UIButton *)sender 
{ 
    // open a alert with text field, cancel and add button 
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Add New Guest" message:@"Example: John Doe" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:@"Add", nil]; 

    alert.alertViewStyle = UIAlertViewStylePlainTextInput; 
    [alert show]; 
} 

Когда пользователь нажимает на кнопку «Добавить» в UIAlertView, я пишу информацию в текстовое поле для списка свойств:

- (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 1) { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsPath = [paths objectAtIndex:0]; 
     NSString *plistPath = [documentsPath stringByAppendingPathComponent:@"Guests.plist"]; 

     [self.guestList addObject:[[alertView textFieldAtIndex:0] text]]; 

     NSMutableDictionary *plistDict = [NSMutableDictionary dictionaryWithObjects:[NSArray arrayWithObjects:guestList, nil] forKeys:[NSArray arrayWithObjects:@"nameList", nil]]; 
     NSString *error = nil; 
     NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:plistDict format:NSPropertyListXMLFormat_v1_0 errorDescription:&error]; 
     if (plistData) { 
      [plistData writeToFile:plistPath atomically:YES]; 
     } else { 
      NSLog(@"Error in saveData: %@", error); 
     } 
    } 
} 

на данный момент, я хотел бы сделать перезагрузку на Tableview (внутри описанного выше способа), поэтому появляется вновь добавленное имя. Я назначил делегата UIAlertView себе.

Однако [self.tableView reloadData] не работает, потому что tableView не распознается в этом методе. Я пробовал много вариантов, но я не могу заставить работать.

Как это сделать?

Спасибо!

+0

таблицаView не распознается? Пожалуйста, объясни. Если диспетчер представлений не является UITableViewController, вам нужно будет добавить свойство представления таблицы самостоятельно. – danh

+0

Точно, как говорит дань. У вас есть IBOutlet для набора таблиц в файле заголовков диспетчера просмотров? – stephenmuss

ответ

1

Каждый контроллер имеет вид. Является ли представление диспетчера делегатов в виде таблицы представлением таблицы? Если да, попробуйте:

[((UITableView *) self.view) reloadData] 

в реализации метода didDismissWithButtonIndex. Вышеуказанный только работает, если контроллер делегата tableView равен также делегат для UIAlertView. Вы бы добиться этого с: `

@interface SomeViewController : UIViewController 
    <UITableViewDataSource, 
     UITableViewDelegate, 
     UIAlertViewDelegate> { /* .... */ } /* ... */ @end 

или лучше (но не всегда возможно):

@interface SomeViewController : UITableViewController  // <- Now you'll have self.tableView 
    < UIAlertViewDelegate> { /* .... */ } /* ... */ @end 
0

Для того, чтобы использовать [TableView reloadData] метод вы должны реализовать

uitableviewdelegate,uitabbleviewdatasource  
reloadData works only if you implement the following three delegate methods 
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 

Вместо использования - (IBAction)addGuest:(UIButton *) отправителя вы можете использовать делегатский метод

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

NB: Не забудьте установить делегат и источник данных для Tableview в ViewController

0

- (Недействительными) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex { NSString * buttonTitle = [alertView buttonTitleAtIndex: buttonIndex ];

if ([buttonTitle isEqualToString:@"Add"]) { 

[tableviewName reloadData]; }}

0

Создать выход для вашего табличном, подключить его в inteface строитель

в .h

IBOutlet UITableView *exercisesTable; 

в.м класс

- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 



    } 
    else if (buttonIndex == 1) 
    { 
     // your code 
     [exercisesTable reloadData]; 
    } 
} 
Смежные вопросы