![](/img/trans.png)
[英]How to display the multiple select values of tableview cell in the detail text label of my previous controller
[英]How to display the text of one tableview cell in the detailtextlabel of previous controller through array
我創建了一個名為 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其中包含 7 個 static 值。
我希望當我單擊第二個 controller 的任何行時,特定行的單元格內的值應設置為前一個控制器的 detailtextlabel,即 TAddAlarmController。
這是我的代碼:
這是 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
這是我的.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
這是 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
這是我的.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
在你的 FirstViewController
1、保留一個名為detailTextValueFromSecondController的成員變量(NSString)。
2、創建一個function命名
-(void)refreshTableToSetDetailText:(NSString *)detailTextValue
然后在你的 SecondViewController
里面
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
放置以下代碼:
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];
}
}
使用didSelectRowAtIndexPath
,找出用戶選擇了哪一行,並將該值存儲在NSUserDefaults
中,以用於在視圖之間進行通信的特定 integer 鍵。
NSUserDefaults *chosenrow = [NSUserDefaults standardUserDefaults];
[chosenrow setInteger:99 forKey: StringYouWantToDisplay];
並在前面的controller的cellForRowAtIndexPath
中,得到integer的key
NSInteger myInt = [chosenrow integerForKey:StringYouWantToDisplay];
並檢查它是否為 99。如果是這種情況,那么您可以確定選擇了該特定值,並為單元格分配detailedTextLabel
的TextLabel。
需要注意的事項:
確保在reloadData
中為您的 tableView 重新加載數據,否則您無法看到detailedText
ViewWillAppear
的更改
在第二個 class 的NSString
屬性中設置所選行的值。 確保在上一個視圖中引用 class ,以便您能夠從該NSString
中獲取值。
NSUserDefaults
用於在兩個視圖之間進行通信。 如果選擇了一行,請檢查 NSUserDefaults。 如果未選擇行,則無需分配詳細的TextLabel。 另一方面,如果選擇了一行,則需要分配它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.