How to transfer data from the detailed view controller to uitableview?

In my application, I use uitable to select a category from my list. my task is when the user clicks or selects a cell, he should be able to view the selected cell part in the next view (detailed view). and when he selects an item in the detailed view, he should be able to go back in the form of a table and should be able to see the selected item in the root controller.

I can navigate correctly from the tableview to detail view, but I cannot show the item that is selected in the detailed view for rootviewcontroller.

please help me with this problem.

enter image description here image one is my rootview controller page. for example: if the user selects @ "make", he will be able to see all the released @ @ make categories on the next page (image 2).

enter image description here image is my detailed page.

and when the user selects @ "abarth", it should be displayed on the rootview controller page (which is the first).

Below is my rootview controller page code:

- (void)viewDidLoad { self.car = [[NSArray alloc]initWithObjects:@"Make",@"Model",@"Price Min",@"Price Max",@"State",nil]; [super viewDidLoad]; } -(NSInteger) numberOfSectionInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [self.car count]; } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *TextCellIdentifier = @"Cell"; UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:TextCellIdentifier]; if (cell==nil) { cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TextCellIdentifier]; cell.accessoryType = UITableViewCellAccessoryNone; cell.selectionStyle = UITableViewCellSelectionStyleNone; } cell.textLabel.text = [self.car objectAtIndex:[indexPath row]]; cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (0 == indexPath.row) { NSLog(@"0"); self.detailcontroller.title = @"Make"; } else if (1 == indexPath.row) { NSLog(@"1"); self.detailcontroller.title = @"Model"; } else if (2 == indexPath.row) { NSLog(@"2"); self.detailcontroller.title = @"Price Min"; } else if (3 == indexPath.row) { self.detailcontroller.title = @"Price Max"; } else if (4 == indexPath.row) { NSLog(@"3"); self.detailcontroller.title = @"State"; } [self.navigationController pushViewController:self.detailcontroller animated:YES]; } following is my detail view page code: - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; if ([self.title isEqualToString:@"Make"]) { detail = [[NSArray alloc]initWithObjects:@"Any Make",@"Abarth",@"AC",@"ADAYER",@"Adelaide",@"ALFA ROMEO",@"ALLARD",@"ALPINE-RENAULT",@"ALVIS",@"ARMSTRONG", @"ASTON MARTIN",@"AUDI",@"AUSTIN",@"AUSTIN HEALEY",@"Barossa",@"BEDFORD", @"BENTLEY",@"BERTONE",@"BMW",@"BOLWELL",@"BRISTOL",@"BUICK",@"BULLET", @"CADILLAC",@"CATERHAM",@"CHERY",@"CHEVROLET",@"CHRYSLER",@"CITROEN", @"Country Central",@"CSV",@"CUSTOM",@"DAEWOO",@"DAIHATSU",@"DAIMLER", @"DATSUN",@"DE TOMASO",@"DELOREAN",@"DODGE",@"ELFIN",@"ESSEX", @"EUNOS",@"EXCALIBUR",@"FERRARI",nil]; if ([self.title isEqualToString:@"Abarth"]) { detail = [[NSArray alloc]initWithObjects:@"HI", nil]; } } else if ([self.title isEqualToString:@"Model"]) { detail = [[NSArray alloc]initWithObjects:@"Any Model", nil]; } else if ([self.title isEqualToString:@"Price Min"]) { detail = [[NSArray alloc]initWithObjects:@"Min",@"$2,500", @"$5,000", @"$7,500", @"$10,000", @"$15,000", @"$20,000", @"$25,000", @"$30,000", @"$35,000", @"$40,000", @"$45,000", @"$50,000", @"$60,000", @"$70,000", @"$80,000", @"$90,000", @"$100,000", @"$500,000", @"$1,000,000",nil]; } else if ([self.title isEqualToString:@"Price Max"]) { detail = [[NSArray alloc]initWithObjects:@"Max", @"$2,500", @"$5,000", @"$7,500", @"$10,000", @"$15,000", @"$20,000", @"$25,000", @"$30,000", @"$35,000", @"$40,000", @"$45,000", @"$50,000", @"$60,000", @"$70,000", @"$80,000", @"$90,000", @"$100,000", @"$500,000", @"$1,000,000",nil]; } else if ([self.title isEqualToString:@"State"]) { detail = [[NSArray alloc]initWithObjects:@"Any State", @"Australian Capital Territory", @"New South Wales", @"Northern Territory", @"Queensland", @"South Australia", @"Tasmania", @"Victoria", @"Western Australia",nil]; } [self.tableView reloadData]; } - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return [detail count]; } - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; } cell.textLabel.text = [detail objectAtIndex: [indexPath row]]; cell.font = [UIFont systemFontOfSize:14.0]; return cell; } - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self.navigationController popViewControllerAnimated:YES]; } 
+6
source share
2 answers

You need to use custom delegates. Create the protocol in your detailed view and embed it in your rootview. Select the selected line as a parameter for the delegation method and from the delegate method, display it in the text box.

 //something like this @interface detailViewController // protocol declaration @protocol myDelegate @optional -(void)selectedValueIs:(NSString *)value; // set it as the property @property (nonatomic, assign) id<myDelegate> selectedValueDelegate; // in your implementation class synthesize it and call the delegate method @implementation detailViewController @synthesize selectedValueDelegate // in your didselectRowAtIndex method call this delegate method - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self selectedValueDelegate])selectedValueIs:valueString] ; [self.navigationController popViewControllerAnimated:YES]; } @end // In your rootViewController conform to this protocol and then set the delegate detailViewCtrlObj.selectedValueDelegate=self; //Implement the delegate Method -(void)selectedValueIs:(NSString *)value{ { // do whatever you want with the value string } 
+8
source

Hi, you will have to do this using protocols and delegates. See my link in the protocol and delegation.

You can also do this by creating a variable in appdelegate, setting its property and accessing it in any other view.

 YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; delegate.yourVariable; 
+1
source

Source: https://habr.com/ru/post/915633/


All Articles