表视图委托方法未在故事板中的新视图控制器中调用

时间:2014-01-08 10:43:59

标签: ios objective-c uitableview

在我的应用程序中我正在使用故事板。在故事板中,我使用默认视图控制器进行登录,并创建了另一个视图控制器名称Inventory。在新视图控制器中,我使用表视图。该表正在显示,但未调用委托和数据源方法。我尝试了很多解决方案,但我明白了这个问题。我使用的代码是:

#import <UIKit/UIKit.h>

@interface InventoryViewController : UIViewController <UITableViewDataSource,     UITableViewDelegate>

@end

实施文件是:

 #import "InventoryViewController.h"
#import "customCell.h"
@interface InventoryViewController ()

@end

@implementation InventoryViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
  self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
return self;
}

- (void)viewDidLoad
{
 [super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor blueColor];
UITableView *table = [[UITableView alloc] initWithFrame:CGRectMake(0, 110, 320, 350)];
table.delegate = self;
table.dataSource = self;
[self.view addSubview:table];
 [table relaodData];

}
- (IBAction)Logout:(id)sender {
UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
UIViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"Login"];
[self.navigationController pushViewController:vc animated:YES];
}

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

#pragma mark - UITableViewDelegate Methods
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;  }


- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"hello");
return 5;

}



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

  customCell *cell = [tableView dequeueReusableCellWithIdentifier:@"customcell"];

if (cell == nil)
{
    cell = [[customCell alloc] initWithStyle:UITableViewCellStyleDefault
                                   reuseIdentifier:@"customcell"];
}

// Here we use the provided setImageWithURL: method to load the web image
// Ensure you use a placeholder image otherwise cells will be initialized with no image
cell.item_image.image = [UIImage imageNamed:@"ipad_strip_logo.png"];
cell.type.text = @"electronics";
cell.name.text = [NSString stringWithFormat:@"my object %d",indexPath.row];

return cell;
}
@end

1 个答案:

答案 0 :(得分:1)

您需要在设置deledate,datasource和datasource数组后应用 - reloadData:方法。

reloadData

重新加载接收器的行和部分。 - (void)reloadData 讨论

调用此方法重新加载用于构造表的所有数据,包括单元格,节页眉和页脚,索引数组等。为了提高效率,表视图仅重新显示可见的行。如果表因重新加载而缩小,它会调整偏移量。表视图的委托或数据源在希望表视图完全重新加载其数据时调用此方法。不应在插入或删除行的方法中调用它,尤其是在通过调用beginUpdates和endUpdates实现的动画块中

完成此文档https://developer.apple.com/library/ios/documentation/uikit/reference/UITableView_Class/Reference/Reference.html#//apple_ref/occ/instm/UITableView/reloadData