我的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/