私はiOS開発の新機能ですが、TableViewで新しくクリックされたセルのUILabelアップデートの問題 - 最初にクリックされたセルのタイトルが保持されます
テーブルセルをクリックすると、タイトル情報(インデックスの配列から作成)が詳細ビューコントローラのUILabelに送信されるという問題があります。 MasterViewController TableViewCellsをクリックして別のセルを選択すると、そのタイトルはUILabelに渡されず、前または最初の項目のクリックされた情報が保持されます。
これは解放/保持の問題、またはテーブルのreloadDataの問題ですが、オブジェクトやテーブルのどこにこれらを追加しようとも、DetailViewControllerの「currentNodeTitle」を新たにクリックされたセルにリセットしませんそれをUILabelに送る前に。私はNSMutableArrayのから作成された細胞nodeTitlesと呼ば持つテーブルを持っている
:
は、ここに私の設定です。
配列データののNSLog出力は nodeTitlesある:( 号、 "課題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
I n MasterViewController.m:
アレイから、各インデックス付き行の内容で各セルが作成されます。
nodeTitles = [[NSMutableArray alloc]initWithObjects:@"Issue", @"Issue 2",@"Issue 3", @"Issue 4", @"Issue 5", @"Issue 6", @"Issue 7", nil];
cellForRowAtIndexPath:didSelectRowAtIndexPathためのその後
- (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;}
:
- (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];
}
viewDidLoadののDetailViewControllerにあります。Mが、私はUILabelの項目を設定しています:項目をクリックした後
- (void)viewDidLoad
{
[super viewDidLoad];
self.title = currentNodeTitle;
_detailDescriptionLabel.text = currentNodeTitle;
[self configureView];
}
- (void)viewDidUnload
{
[super viewDidUnload];
[currentNodeTitle release];
}
、およびバックマスターコントローラにクリックし、私は新たに選択したセルのタイトルを取得することができますどのようにUILabelに表示しますDetailViewController?
感謝〜
質問を指定して、何をしたいか教えてください。 – Emon