2013-05-01 2 views
3

Я тренировался с помощью tableViews, но не могу понять, как вставлять новые элементы при нажатии кнопки.Как вставлять элементы в UITableView при щелчке UIButton в iOS

Это то, что у меня есть:

BIDViewController.h:

#import <UIKit/UIKit.h> 

@interface BIDViewController : UIViewController 

// add protocols 
<UITableViewDataSource, UITableViewDelegate> 

//this will hold the data 
@property (strong, nonatomic) NSMutableArray *names; 

- (IBAction)addItems:(id)sender; 

@end 

BIDViewController.m:

#import "BIDViewController.h" 

@interface BIDViewController() 

@end 

@implementation BIDViewController 

//lazy instantiation 
-(NSMutableArray*)names 
{ 
    if (_names == nil) { 
     _names = [[NSMutableArray alloc]init]; 
    } 
    return _names; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // add data to be display 

    [self.names addObject:@"Daniel"]; 
    [self.names addObject:@"Alejandro"]; 
    [self.names addObject:@"Nathan"]; 
} 

//table view 
-(NSInteger)tableView:(UITableView*)tableView 
numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.names count]; 
} 

- (UITableViewCell *) tableView:(UITableView *)tableView 
      cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"identifier"]; 

    if (cell == nil) { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]; 
    } 
    cell.textLabel.text = self.names [indexPath.row]; 
    return cell; 
} 

- (IBAction)addItems:(id)sender { 
    // I thought it was as simple as this, but it doesn't work 
    [self.names addObject:@"Brad"]; 
    [tableView relaodData]; 
} 
@end 

Я думал, что это было просто, как вставки элементов в массив и чем перезарядка данные, но он не работает.

Может ли кто-нибудь показать мне, как добавлять новые элементы в таблицуView при нажатии кнопки?

Большое спасибо

+2

Какое поведение вы в настоящее время наблюдаете? Вызывается ли 'addItems:' на самом деле? Я думаю, что вы тоже «reloadData». – jszumski

ответ

4

Вы делаете это правильно,

- (IBAction)addItems:(id)sender { 
    // I thought it was as simple as this, but it doesn't work 
    [self.names addObject:@"Brad"]; 
    [self.tableView relaodData]; 
} 

правильный путь.

Пожалуйста, дважды проверьте переменную tableView, я не вижу ее декларации.

убедитесь, что вы,

@property(weak, nonatomic) IBOutlet UITableView *tableView; 
[self.tableView setDelegate:self]; 
[self.tableView setDataSource:self]; 

и правильно подключен к Tableview .nib

+0

Похоже, что мне не хватало свойства для стола, теперь он работает. Добавлено свойство для таблицы и изменено [tableView reloadData]; to [self.tableView reloadData]; Большое спасибо. –

1

Вы находитесь на правильном пути. Убедитесь, что вы правильно настроили делегат и источник данных, и ваша розетка подключена к кнопке.

Редактировать: Также достаточно уверен, что вы не можете просто строки «blah» в изменяемый массив. Сначала попробуйте инициализировать текст как NSString, а затем передайте его как указатель.

+2

Уверен, вы можете использовать @ "blah" - это создает объект NSString. – rdelmar

+0

@rdelmar: Правильно. Я просто так не делаю этого по той или иной причине. Я думаю, вы также можете добавить bools и другие литералы ... спасибо за головы: http://clang.llvm.org/docs/ObjectiveCLiterals.html – ninehundredt

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