我的UITableViewController中有storyboard,其中三个单元格的中间都带有标签。
例如,如果用户通过选择一个项目单击显示另一个具有项目列表的tableview中的第一个单元格标签,则会返回到前一个tableView,并且项目名称应打印在标签的位置。

#import <UIKit/UIKit.h>
@interface carSelectCellTableViewCell : UITableViewCell

@property (weak, nonatomic) IBOutlet UILabel *carMake;
@property (weak, nonatomic) IBOutlet UILabel *carModel;
@property (weak, nonatomic) IBOutlet UILabel *carRego;
@property (weak, nonatomic) IBOutlet UILabel *carYear;

//the below label are the labels in the cells.
@property (weak, nonatomic) IBOutlet UILabel *carSelected;
@property (weak, nonatomic) IBOutlet UILabel *location;
@property (weak, nonatomic) IBOutlet UILabel *service;
@end

#import "BookService.h"
#import <Parse/Parse.h>
#import "carSelectCellTableViewCell.h"
@interface BookService ()
@end

@implementation BookService

@synthesize tableView;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.tableView.delegate = self;
    self.tableView.dataSource = self;

-(void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    NSLog(@"cell tabbed");
    PFObject *temp = [customerCars objectAtIndex:indexPath.row];
    NSLog(@"%@", temp.objectId);
    NSString *car = temp.objectId;
        UIStoryboard *dashboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil];
    UIViewController *change = [dashboard instantiateViewControllerWithIdentifier:@"bookAservice"];
    [self presentViewController:change animated:YES completion:nil];
    static NSString *Identifier = @"carSelectedCell";
   //here is where i'm calling the cell to change the label value when the selection is made. before dequeueReusableCellWithIdentifier there should be appropriate tableView Table.
    carSelectCellTableViewCell *cell2 = [dequeueReusableCellWithIdentifier:Identifier];
   cell2.carSelected.text = @"selcted";

}


我如何以编程方式启动tableView。这样我就可以将单元格标签值更改为所选项目。

最佳答案

现在,如果您假设第一个表视图的名称为ParentViewController,第二个表视图的名称为childView,则可以执行以下Foll:

为此,使ParentController成为ChildController的委托。这允许ChildController将消息发送回ParentController,使我们能够将数据发送回。

若要让ParentController代表ChildController,它必须符合我们必须指定的ChildController协议。这告诉ParentController必须实现哪些方法。

在ChildController.h中,在#import下方但在@interface上方,指定协议。

@class ChildController;

@protocol ViewControllerBDelegate <NSObject>
- (void)addItemViewController:(ChildController *)controller didFinishEnteringItem:(NSString *)item;
@end


接下来仍然在ChildController.h中,您需要在ChildController.h中设置一个委托属性

@property (nonatomic, weak) id <ChildControllerDelegate> delegate;


在ChildController中,当我们弹出视图控制器时,我们在委托上调用一条消息。

对于这种情况,将在didSelectRowAtIndex方法中调用以下内容

NSString *itemToPassBack = @"Pass this value back to ParentController";
[self.delegate addItemViewController:self didFinishEnteringItem:itemToPassBack];


对于ChildController就是这样。现在,在ParentController.h中,告诉ParentViewController导入Child并遵守其协议。

导入“ ChildController.h”

@interface ParentController:UIViewController
在ParentController.m中,从我们的协议中实现以下方法

- (void)addItemViewController:(ChildController *)controller didFinishEnteringItem:(NSString *)item
{
    NSLog(@"This was returned from ChildController %@",item);
}


我们需要做的最后一件事是在将ChildController推送到导航堆栈之前,告诉ChildController ParentController是其委托。

ChildController *ChildController = [[ChildController alloc] initWithNib:@"ChildController" bundle:nil];
ChildController.delegate = self
[[self navigationController] pushViewController:ChildController animated:YES];

关于ios - 在代码中启动UITalbleViewController,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35261351/

10-09 16:14