Xcode / ObjectiveC - 将UITableViewController转换为嵌入在UIViewController中的TableView

时间:2013-10-15 10:11:14

标签: objective-c xcode

我对这个Native App dev相当新 - 我已经构建了一个包含UITableViewController来显示消息的应用程序 - 一切正常 - 但出于样式原因,我需要将它从TableViewController更改为嵌入在viewcontroller中的tableview。

我创建了一个包含表视图和相关链接自定义单元格/字段的视图控制器,并将关联的头文件更改为 -

 @interface NotificationsListTVController : UIViewController

但是我的表方法不再开火了,我不确定如何实例化它们?

(下面的代码)     #pragma mark - 表视图数据源

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{

// Return the number of sections.
return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{

// Return the number of rows in the section.
return self.GPTNotifications.count;
}

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

static NSString *CellIdentifier = @"Cell";
static NSString *CellIdentifierRead = @"CellRead";

UITableViewCell *cell;


notifications *n = [self.GPTNotifications objectAtIndex:indexPath.row];



   if (n.read == false) {
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];



    CustomCellRead *cellReadB = (CustomCellRead *)cell;
    cellReadB.notifTitle.text = n.notifTitleD;
    cellReadB.notifDate.text = n.notifDateD;
    cellReadB.notifMsg.text = n.notifMessage;


 return cellReadB;
}

 else {
    cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifierRead     forIndexPath:indexPath];



    CustomCell *cellReadB = (CustomCell *)cell;
    cellReadB.notifTitle.text = n.notifTitleD;
    cellReadB.notifDate.text = n.notifDateD;
    cellReadB.notifMsg.text = n.notifMessage;


    return cellReadB;

    }


 }

3 个答案:

答案 0 :(得分:2)

您是否将tableview的委托和数据源设置为您的班级?

类似的东西:

self.myTableView.delegate = self;
self.myTableView.dataSource = self;

当你创建一个UITableViewController时,这就完成了,但如果你自己添加表,你需要设置它们。

此外:

@interface NotificationsListTVController : UIViewController <UITableViewDelegate, UITableViewDataSource>

答案 1 :(得分:1)

我是这样做的Interface Builder

  • 制作TableViewController
  • 制作ViewController并向其添加ContainerView
  • 删除随附的segued嵌入式ViewController
  • 选择ContainerView并绘制从viewDidLoadTableViewController
  • 的连接
  • 您只能获得一次选项:embed

完成。您的TableViewController现在将显示在ViewController中。

将您需要的任何数据从ViewController传递到带有嵌入式Segue的TableViewController。

答案 2 :(得分:0)

在NotificationsListTVController.h中进行以下更改:

@interface NotificationsListTVController : UIViewController<UITableViewDataSource,UITableViewDelegate>

同样在NotificationsListTVController.m中,也不要忘记提供这两个语句。

 tableView.delegate=self ;
 tableView.dataSource=self;

这些是设置委托方法所必需的。初始化tableView后需要提供这两个语句。比如:

   tblView = [[UITableView alloc] initWithFrame:CGRectMake(100,200,320,420) style: UITableViewStyleGrouped];


   tblView.delegate = self;
   tblView.dataSource = self;

   [self.view addSubview:tblView];

您指的这些方法是委托方法,与其他普通方法不同,它们无法直接触发。

希望它能帮助!!!