【发布时间】:2011-12-18 21:29:09
【问题描述】:
我对 iOS 开发还很陌生,但经过大量搜索后仍未找到解决此问题的方法。
问题在于,当单击表格单元格时,它的标题信息(从索引处的数组构建)被发送到详细视图控制器上的 UILabel。 那么点击返回MasterViewController TableViewCells后,选择不同的单元格后,它的标题并没有传递给UILabel,而保留之前或第一个点击的项目信息。
这可能是释放/保留问题,或表 reloadData 问题,但无论我尝试在何处为我的对象或表添加这些内容,它都不会将 DetailViewController 上的“currentNodeTitle”重置为之前新单击的单元格将其发送到 UILabel。
这是我的设置:
我有一个表格,其中包含从名为 nodeTitles 的 NSMutableArray 创建的单元格。
数组数据的NSLog输出为 节点标题:( 问题, “问题 2”, “问题3”, “问题 4”, “问题 5”, “问题 6”, “问题 7” )
在 MasterViewController.h 中:
@class DetailViewController;
@interface MasterViewController : UITableViewController {
NSMutableArray * nodeTitles;
}
@property (strong, nonatomic) DetailViewController *detailViewController;
@property (nonatomic, retain) NSMutableArray *nodeTitles;
@end
在 MasterViewController.m 中:
从数组中创建每个单元格,其中包含每个索引行的内容。
nodeTitles = [[NSMutableArray alloc]initWithObjects:@"Issue", @"Issue 2",@"Issue 3", @"Issue 4", @"Issue 5", @"Issue 6", @"Issue 7", nil];
cellForRowAtIndexPath:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath) {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
}
}
//*only thing added*
cell.textLabel.text = [self.nodeTitles objectAtIndex: [indexPath row]];
//*end only thing added*
return cell;}
那么对于 didSelectRowAtIndexPath:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
if (!self.detailViewController) {
self.detailViewController = [[[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil] autorelease];
self.detailViewController.currentNodeTitle = [nodeTitles objectAtIndex:indexPath.row];
//[contentTitleArray release];
}
[self.navigationController pushViewController:self.detailViewController animated:YES];
}
}
此时一切正常。我有一个表格视图单元格列表,其中包含我的数组中的内容,单击时,我已将它们链接到 UILabel。
我在 MasterViewController 中的 Dealloc、viewDidUnload、viewWillAppear、viewDidAppear 和 viewWillDissappear:
- (void)dealloc
{
[self.nodeTitles release];
[_detailViewController release];
[super dealloc];
}
- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
self.nodeTitles = nil;
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[self.tableView reloadData];
}
- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[self.tableView reloadData];
}
我的 DetailViewController.h:
@interface DetailViewController : UIViewController <UISplitViewControllerDelegate> {
IBOutlet UILabel *detailDescriptionLabel;
NSMutableString *currentNodeTitle;
}
@property (strong, nonatomic) id detailItem;
@property (nonatomic, retain) IBOutlet UILabel *detailDescriptionLabel;
@property (nonatomic, retain)NSMutableString *currentNodeTitle;
@end
DetailViewController.m:
@interface DetailViewController ()
@property (strong, nonatomic) UIPopoverController *masterPopoverController;
- (void)configureView;
@end
@implementation DetailViewController
@synthesize detailItem = _detailItem;
@synthesize detailDescriptionLabel = _detailDescriptionLabel;
@synthesize masterPopoverController = _masterPopoverController;
@synthesize currentNodeTitle;
- (void)dealloc
{
currentNodeTitle = nil;
[_detailItem release];
[_detailDescriptionLabel release];
[_masterPopoverController release];
[super dealloc];
}
在 DetailViewController.m 上的 viewDidLoad 中,我将 UILabel 项设置为:
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = currentNodeTitle;
_detailDescriptionLabel.text = currentNodeTitle;
[self configureView];
}
- (void)viewDidUnload
{
[super viewDidUnload];
[currentNodeTitle release];
}
点击一个项目后,点击返回到主控制器,如何在 DetailViewController 上的 UILabel 中显示新选择的单元格标题?
谢谢~
【问题讨论】:
-
指定您的问题并告诉我您想要什么?
标签: iphone uitableview uiviewcontroller uilabel