2012-03-07 1 views
1

Я - разработчик приложений для iOS.
Я пытаюсь создать приложение «UITableView -> для подробного просмотра».
И узнал проект «Мастер-детализация» в шаблоне проекта.Xcode 4.2 Snowleopard Master-Detail Устранение неполадок приложений

Затем я попробовал. Тогда проблема пришла. У меня был динамический вид таблицы, поэтому я должен сделать динамический вид детализированным. Как это:

Table View  Detail View 
    Item A   Item A is an <item_A_description>, with <item_A_summary> 
    Item B   Item B is an <item_B_description>, with <item_B_summary> 
    Item C   Item C is an <item_C_description>, with <item_C_summary> 

проблема, после того, как я вернусь к просмотру таблицы (список) с помощью назад кнопки меню, то я выбираю снова элемент из другой строки в списке, то Detail View не изменяется на выбранное значение Item.
я передать значение с помощью (MasterView) -> initWithNibName -> (DetailView)
Моя среда: XCode 4.2 для SnowLeopard, IOS SDK 5

Обновлено
После того как я проверить журнал, значение параметра прошло с правильным значением. Но IBOutlet UIlabel, который я установил, не изменил его ценность.
Это мой код:

MasterViewController.m:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    TheItems *a = [data objectAtIndex:[indexPath row]]; 
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
     if (!self.detailViewController) { 
      self.detailViewController = [[DetailViewController alloc] initWithNibName:@"DetailViewController_iPhone" bundle:nil withItemId:(NSString *)a.itemId]; 
     } 
     [self.navigationController pushViewController:self.detailViewController animated:YES]; 
     [self.detailViewController release]; 
    } 
} 

DetailViewController.h:

@interface metapsDetailViewController : UIViewController <UISplitViewControllerDelegate> 
{ 
    NSString *itemId; 
} 
@property (strong, nonatomic) IBOutlet UILabel * detailItem; 
@property (nonatomic, retain) NSString *itemId; 
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withItemId:(NSString *)itemId; 

DetailViewController.m:

@synthesize detailItem = _detailItem; 
@synthesize itemId; 

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil withItemId:(NSString *)itemId 
{ 


    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     self.title = NSLocalizedString(@"Detail", @"Detail"); 
     self.itemId = itemId; 
    } 
} 

- (void)viewDidLoad 
{ 
    self.detailItem.text = self.itemId; 
} 

Благодаря

ответ

1

Вы создаете только detailViewController, когда он не существует. Элемент, который вы указываете detailViewController, находится в вашем init, поэтому элемент будет установлен только один раз. Вы должны добавить метод (или свойство) в свой detailViewController, где вы можете установить элемент, чтобы он мог изменить ваш detailViewController при получении новых данных.

Edit: Реализовать что-то вроде этого:

@synthesize itemId = _itemId; 

-(void)setitemId:(NSString*)itemId{ 

    if(_itemId != itemId) 
    { 
     [_itemId release]; 
     _itemId = [itemId retain]; 
     self.detailItem.text = _itemId; 
    } 
} 
+0

спасибо за ответ. Да, на самом деле я попытался использовать свойство в DetailViewController и передать значение в файле masterViewController didSelectRowAtIndexPath через это свойство 'self.detailViewController.itemId = a.itemId;' ... Но он также не работал – arufian

+0

Вам следует реализовать изменение метки а также в detailViewController, посмотрите на редактирование. – ggfela

+0

Спасибо, я даю ему попробовать. – arufian