从动态创建的UIbar按钮启动Uitableview控制器

时间:2012-12-21 00:55:47

标签: ios dynamic uitableview uibarbuttonitem launch

- (void)createBarButtons
{
    UIBarButtonItem *myCheckButton = [[UIBarButtonItem alloc] initWithTitle:@"Check Records" style:UIBarButtonItemStylePlain target:self action:@selector(checkRecordsAction)];
    UIBarButtonItem *mySaveButton = [[UIBarButtonItem alloc] initWithTitle:@"Save" style:UIBarButtonItemStylePlain target:self action:@selector(saveAction)];
    [mySaveButton setTintColor:[UIColor colorWithRed:34.0/255.0 green:97.0/255.0 blue:221.0/255.0 alpha:1]];
    NSArray *myButtonArray = [[NSArray alloc]initWithObjects:mySaveButton, myCheckButton,nil];
    self.navigationItem.rightBarButtonItems = myButtonArray;
}

我不知道这个问题是否属于过于本地化的类别。但请帮帮我。就像你看到我创建了两个栏按钮项目。保存只是将数据保存到CoreData,工作得很好。但是检查记录应该启动一个新的UITableviewcontroller。

- (void)checkRecordsAction
{
NSLog(@"the new stack action");
ITMSyncRecordsTVC *syncRecords  = [[ITMSyncRecordsTVC alloc]init];
//  [self presentViewController:syncRecords animated:YES completion:^{
//  self.navigationController.view.superview.bounds = CGRectMake(0, 0, 250, 250);}];
[self.navigationController pushViewController:syncRecords animated:YES];
}

ITMSyncRecordsTVC是一个TableViewController,上面有一个“后退”按钮。所以,当我点击检查记录时,它会启动一个tableview控制器,但没有值,但它没有显示我放上了“后退”栏按钮。到目前为止,我一直在使用segues和故事板。但是如何在没有它们的情况下启动新的视图控制器我不知道。我第一次进入ios是ios6。我错过了一些我不知道的事情。那么让我知道如何调用/启动一个新的TableViewController。在android中我们有意图完成这个伎俩。如果您需要更多信息,请与我们联系。谢谢... 编辑:所以我编辑了我的checkRecordsAction代码。

编辑:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath

{

ITMOrdersVC *ordersVC = [[ITMOrdersVC alloc]init];
NSLog(@"at line 188 %d",indexPath.row);
if(indexPath.row < self.salesOrdersArray.count)
{
    ordersVC.salesOrder = [self.salesOrdersArray objectAtIndex:indexPath.row];
    NSLog(@"the sales purchase order number is %@",ordersVC.salesOrder.purchaseOrderNumber);

    NSLog(@"done - 140");
    [self.navigationController pushViewController:ordersVC animated:YES];
}
}

因此,在ITMSyncRecordsTVC表视图控制器上选择一行时,它会执行上述操作。我得到一个新的ITMOrdersVC屏幕,左侧有“后退”栏按钮和2个动态生成的栏按钮。我得到2个动态生成的栏按钮,但不是后面。我想,一旦我点击该行,它将“返回”到我传递salesOrder对象的上一个屏幕。我的下一步是检查我是否从TVC获得salesorder对象然后加载它。所以基本上只有2个屏幕。第一个屏幕(保存,检查同步记录)。第二个屏幕点击一个。)返回(转到第一个屏幕......什么都没有)或b。)点击第二个屏幕中的一行,并在没有条形按钮的情况下填充第一个屏幕。如果不清楚请问我。

1 个答案:

答案 0 :(得分:1)

要使用故事板启动新的表视图控制器,您需要:

  1. 将主场景嵌入导航控制器中。

    embed main scene in nav controller

  2. 您希望从主控制器推送到第二个控制器。因此,控制 - 从视图控制器图标(在主场景下方的栏中)拖动到下一个场景:

    add push segue

  3. 它应该看起来像(注意目标表视图中导航栏的外观):

    destination has navigation bar

  4. 然后选择segue并给它一个“故事板标识符”:

    give segue storyboard id

  5. 现在,转换到该场景的代码如下所示:

  6. checkRecordsAction

    - (void)checkRecordsAction
    {
        NSLog(@"the new stack action");
    
        [self performSegueWithIdentifier:@"PushSegue" sender:self];
    }
    

    <强>更新

    顺便说一下,为了充分披露,有一个替代推送segue。如果你给下一个场景本身一个“故事板id”,你可以使用下面的代码(显然用你给下一个场景的标识符替换"insertNextScenesStoryboardIdHere"

    - (void)checkRecordsAction
    {
        NSLog(@"the new stack action");
    
        UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"insertNextScenesStoryboardIdHere"];
        [self.navigationController pushViewController:controller animated:YES];
    }
    

    我个人不喜欢这个,因为你的故事板现在有一个没有任何segue的场景,你的代码现在已经决定了视图控制器之间的转换性质与故事板中的所有内容等等,但这是另一种方法。