2013-12-05 3 views
0

Я пытаюсь заполнить UITableView из NSMutableArray. У меня есть UITextField и кнопка на ViewController. Когда я набираю текст в UITextField и нажимаю кнопку, я могу видеть, что текст добавляется в массив с помощью NSLog. Я установил точки останова в методе источника данных UITableView, но даже не ударил эти точки останова, когда я нажимаю кнопку.Заполнение UITableView с нажатой кнопки

#import <UIKit/UIKit.h> 

@interface ViewController : UIViewController<UITableViewDataSource, UITableViewDelegate> 
{ 
    NSMutableArray *arrBarcode; 
    IBOutlet UITextField *txtInsert; 
} 
@property IBOutlet UITableView *myTableView; 
-(IBAction)btnPressed:(id)sender; 
@end 



#import "ViewController.h" 

@interface ViewController() 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.myTableView.delegate = self; 
    self.myTableView.dataSource = self; 
    arrBarcode = [[NSMutableArray alloc]init]; 
} 

-(IBAction)btnPressed:(id)sender{ 
    [arrBarcode addObject:txtInsert.text]; 
    NSLog(@"array count is : %i", [arrBarcode count]); 
    [self.myTableView reloadData]; 
} 

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{ 
    [txtInsert resignFirstResponder]; 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

-(NSInteger)numberOfSectionsInTableView: (UITableView *)tableView{ 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ 
    if ([arrBarcode count] == 0){ 
     return 0; 
    } 
    else{ 
     NSLog(@"Number of Rows : %i", [arrBarcode count]); 
     return [arrBarcode count]; 
    } 
} 

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath{ 
    static NSString *CellIdentifier = @"Cell Identifier"; 
    [tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:CellIdentifier]; 
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath]; 
    if (cell == nil){ 
     cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; 
} 
    NSString *barcode = [arrBarcode objectAtIndex:[indexPath row]]; 
    [cell.textLabel setText:barcode]; 
    return cell; 
} 

@end 

Когда я инициализировать NSMutable массив с некоторыми данными в методе viewDidLoad, то UITableView заполняемых хорошо, но не с динамическим массивом. Я новичок в Objective C, может ли кто-то указать мне в правильном направлении?

ответ

1

Код выглядит нормально (даже если он не очень эффективен). Вы должны проверить, действительно ли кнопка связана с действием. В раскадровке или построителе интерфейсов выберите кнопку и проверьте справа правый инспектор справа. Проверьте правильность подключения.

Возможно, вы хотите избавиться от звонка touchesBegan и вызвать resignFirstResponder при нажатии кнопки.

Для numberOfRowsInSection Я думаю, что это достаточно:

return arrBarcode.count; 
+0

Моя проблема была в раскадровке, я создал свойство myTableView, но я не подключил myTableView с представлением таблицы в контроллере Outlets for View. Когда кнопка нажата, я реализовал resignFirstResponder. Прекрасно работает! – Pramesh

+0

Так что проблема с раскадрой была проблемой, как и предполагалось. Вы должны принять этот ответ. – Mundi

1

Я не уверен, но следующая строка выглядит странно для меня:

@synthesize myTableView = myTableView_;

Это говорит компилятору, что он делает геттер и сеттер для свойства myTableView и поддерживает его с помощью iVar с именем myTableView_. Но в вашем случае вы уже определили iVar с именем myTableView_.

Попробуйте подключить UITableView как свойство вместо этого. Свойство будет поддерживаться переменной экземпляра с формой _yourProperty и автоматически генерируется getter и setter, поэтому @synthesize в этом случае действительно не требуется.

+0

Я избавился от iVar myTableView_ и создал свойство myTableView IBOutlet. Как вы сказали, нет необходимости создавать iVar. Моя проблема была в Outlet View контроллера, я не подключил myTableView с Table View. благодаря – Pramesh

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