从按下的按钮填充UITableView

时间:2013-12-05 21:21:20

标签: objective-c uitableview

我正在尝试从NSMutableArray填充UITableView。我有一个UITextField和一个ViewController上的按钮。当我在UITextField中单击任何文本并单击按钮时,我可以看到使用NSLog添加到数组中的文本。我在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

当我使用viewDidLoad方法中的某些数据初始化NSMutable数组时,UITableView填充正常但不包含动态数组。我是Objective C的新手,有人能指出我正确的方向吗?

2 个答案:

答案 0 :(得分:1)

代码看起来不错(即使效率不高)。您必须检查按钮是否确实连接到操作。在storyboard或Interface Builder中,选择按钮并选中右侧最右侧的检查器。查看操作是否正确连接。

也许您想要摆脱touchesBegan来电,并在按下按钮时拨打resignFirstResponder

对于numberOfRowsInSection我认为这已经足够了:

return arrBarcode.count;

答案 1 :(得分:1)

我不确定,但以下行对我来说很奇怪:

@synthesize myTableView = myTableView _;

这告诉编译器为属性myTableView创建一个getter和setter,并用名为myTableView_的iVar支持它。但在你的情况下,你已经定义了一个名为myTableView _的

尝试将UITableView作为属性连接。属性将由_yourProperty形式的实例变量支持,并自动生成getter和setter,因此在这种情况下不需要@synthesize。