[英]How to display the text of one tableview cell in the detailtextlabel of previous controller through array
I have created a controller class named TAddAlarmController which has a tableview which consists of 6 rows.我创建了一个名为 TAddAlarmController 的 controller class ,它有一个由 6 行组成的表格视图。 When I click on the second row it navigates to a page which is a new controller name TAlarmNewController which is a tableviewcontroller and in which I have created a nsmutablearray and populated that array with 7 static values so when the second controller is displayed the tableview is displayed with 7 static values in it.
When I click on the second row it navigates to a page which is a new controller name TAlarmNewController which is a tableviewcontroller and in which I have created a nsmutablearray and populated that array with 7 static values so when the second controller is displayed the tableview is displayed其中包含 7 个 static 值。
I want that when I click on any row of second controller the value that is present inside the cell of the paticular row should be set to detailtextlabel of the previouscontroller ie TAddAlarmController.我希望当我单击第二个 controller 的任何行时,特定行的单元格内的值应设置为前一个控制器的 detailtextlabel,即 TAddAlarmController。
This is my code:这是我的代码:
This is AddAlarmcontroller.h这是 AddAlarmcontroller.h
#import <UIKit/UIKit.h>
@class StopSnoozeAppDelegate;
@class Alarm;
@class TAlarmNewController;
@interface TAddAlarmController : UITableViewController {
StopSnoozeAppDelegate *app;
IBOutlet UITableView *tblView;
NSDateFormatter *dateFormatter;
NSUndoManager *undoManager;
Alarm *am;
TAlarmNewController *anew;
}
@property(nonatomic,retain)NSDateFormatter *dateFormatter;
@property (nonatomic,retain)Alarm *am;
@property (nonatomic,retain)NSUndoManager *undoManager;
@end
This is my.m file这是我的.m 文件
#import "TAddAlarmController.h"
#import "Alarm.h"
#import "TAlarmNewController.h"
@implementation TAddAlarmController
@synthesize dateFormatter;
@synthesize am;
@synthesize undoManager;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidUnload {
// Release any properties that are loaded in viewDidLoad or can be recreated lazily.
self.dateFormatter = nil;
}
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];
}
#pragma mark -
#pragma mark Table view data source
- (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 6;
}
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 44;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
/*
Dequeue or create and then configure a table cell for each attribute of the book.
*/
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
//cell.editingAccessoryType = UITableViewCellAccessoryDisclosureIndicator;
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
switch (indexPath.row) {
case 0:
cell.textLabel.text = @"Time";
break;
case 1:
cell.textLabel.text = @"Repeat";
break;
case 2:
cell.textLabel.text = @"Sound";
break;
case 3:
cell.textLabel.text = @"Snooze Interval";
break;
case 4:
cell.textLabel.text = @"Alarm Message";
break;
case 5:
cell.textLabel.text = @"Snooze Penalty";
break;
}
return cell;
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
TAlarmNewController *controller = [[TAlarmNewController alloc]initWithNibName:@"TAlarmNewController" bundle:nil];
switch (indexPath.row) {
case 0:
controller.editedObject = @"Time";
break;
case 1:
[self.navigationController pushViewController:controller animated:YES];
[controller release];
default:
break;
}
}
- (NSDateFormatter *)dateFormatter {
if (dateFormatter == nil) {
dateFormatter = [[NSDateFormatter alloc] init];
//[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
[dateFormatter setTimeStyle:NSDateFormatterNoStyle];
}
return dateFormatter;
}
- (void)dealloc {
[super dealloc];
}
@end
This is TAlarmNewController.h这是 TAlarmNewController.h
@class TAddAlarmController;
@interface TAlarmNewController : UITableViewController {
IBOutlet UITableView *tblView;
UIDatePicker *datePicker;
id editedObject;
TAddAlarmController *Addalarm;
NSMutableArray *days;//this is the array where i am storing 7 values statically
}
@property (nonatomic,retain) IBOutlet UITableView *tblView;
@property(nonatomic,retain) IBOutlet UIDatePicker *datePicker;
@property (nonatomic, retain) id editedObject;
@property(nonatomic,retain)NSMutableArray *days;
@property (nonatomic, retain, readonly) TAddAlarmController *Addalarm;
-(IBAction)cancel;
-(IBAction)save;
@end
This is my.m file这是我的.m 文件
#import "TAlarmNewController.h"
#import "TAddAlarmController.h"
@implementation TAlarmNewController
@synthesize editedObject,datePicker, tblView,days,Addalarm;
#pragma mark -
#pragma mark View lifecycle
- (void)viewDidLoad {
UIBarButtonItem * saveButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)];
self.navigationItem.rightBarButtonItem = saveButton;
[saveButton release];
UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
self.navigationItem.leftBarButtonItem = cancelButton;
[cancelButton release];
days =[[NSMutableArray alloc]initWithObjects:@"Every Monday",@"Every Tuesday",@"Every Wednesday",@"Every Thursday",@"Every Friday",@"Every Saturday",@"Every Sunday0",nil];
[super viewDidLoad];
}
- (TAddAlarmController *)Addalarm {
if (Addalarm == nil) {
Addalarm = [[TAddAlarmController alloc] initWithStyle:UITableViewStyleGrouped];
}
return Addalarm;
}
-(IBAction)save{
[self.navigationController popViewControllerAnimated:YES];
//
}
-(IBAction)cancel{
[self.navigationController popViewControllerAnimated:YES];
}
#pragma mark -
#pragma mark Table view data source
- (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 [days count];
}
// Customize the appearance of table view cells.
- (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] autorelease];
}
cell.textLabel.text = [days objectAtIndex:indexPath.row];
// Configure the cell...
return cell;
}
#pragma mark -
#pragma mark Table view delegate
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
}
- (void)dealloc {
[datePicker release];
[super dealloc];
}
@end
In your FirstViewController在你的 FirstViewController
1, keep a member variable(NSString) named detailTextValueFromSecondController. 1、保留一个名为detailTextValueFromSecondController的成员变量(NSString)。
2, create a function named 2、创建一个function命名
-(void)refreshTableToSetDetailText:(NSString *)detailTextValue
Then in your SecondViewController然后在你的 SecondViewController
Inside里面
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
place the following code:放置以下代码:
for (int i =0; i < [[self.navigationController viewControllers] count]; i++)
{
UIViewController *aController = [[self.navigationController viewControllers] objectAtIndex:i];
if ([aController isKindOfClass:[FirstViewController class]])
{
FirstViewController *aFirstViewController = (FirstViewController *)aController;
[aFirstViewController refreshTableToSetDetailText:yourstringtosetondetaillabel];
[self.navigationController popToViewController:aController animated:YES];
}
}
Using the didSelectRowAtIndexPath
, find out which row was chosen by the user, and store that value in NSUserDefaults
for a specific integer key for communicating between views.使用
didSelectRowAtIndexPath
,找出用户选择了哪一行,并将该值存储在NSUserDefaults
中,以用于在视图之间进行通信的特定 integer 键。
NSUserDefaults *chosenrow = [NSUserDefaults standardUserDefaults];
[chosenrow setInteger:99 forKey: StringYouWantToDisplay];
And in the cellForRowAtIndexPath
of the previous controller, get the key for the integer并在前面的controller的
cellForRowAtIndexPath
中,得到integer的key
NSInteger myInt = [chosenrow integerForKey:StringYouWantToDisplay];
And check if it is 99. If this is the case then you can be certain that that particular value was chosen, and allocate the detailedTextLabel
for the cells.并检查它是否为 99。如果是这种情况,那么您可以确定选择了该特定值,并为单元格分配
detailedTextLabel
的TextLabel。
Somethings to note:需要注意的事项:
Make sure to reloadData
for your tableView in your ViewWillAppear
or you cannot see the changes for the detailedText
确保在
reloadData
中为您的 tableView 重新加载数据,否则您无法看到detailedText
ViewWillAppear
的更改
Set the value of the chosen row in a NSString
property of the second class.在第二个 class 的
NSString
属性中设置所选行的值。 Make sure to reference that class in the the previous view so that you are able to grab the value from that NSString
.确保在上一个视图中引用 class ,以便您能够从该
NSString
中获取值。
NSUserDefaults
is for communicating between two views. NSUserDefaults
用于在两个视图之间进行通信。 Check for NSUserDefaults if a row was chosen.如果选择了一行,请检查 NSUserDefaults。 If a row was not chosen, then you need not allocate a detailedTextLabel.
如果未选择行,则无需分配详细的TextLabel。 On the otherhand, if a row was selected, you will need to allocate it..
另一方面,如果选择了一行,则需要分配它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.