2012-05-14 2 views
6

В моем приложении я использую подходящий для выбора категории из своего списка. Моя задача - когда пользователь нажимает или выбирает ячейку, он должен иметь возможность просматривать выбранную деталь ячейки в следующем представлении (подробный вид). и когда он выбирает элемент в подробном представлении, он должен иметь возможность вернуться назад в виде таблицы и должен иметь возможность видеть выбранный элемент в корневом контроллере.Как передать данные с детального контроллера представления на uitableview?

Я могу правильно перемещаться из вида tableview to detail, но я не могу показать элемент, который выбран в подробном представлении для rootviewcontroller.

, пожалуйста, помогите мне с этой проблемой.

enter image description here image one - это моя страница управления контроллером rootview. например: если пользователь выбирает @ "make", он сможет увидеть все выпущенные категории @ "make" . на следующей странице (изображение 2).

enter image description here image to is my detail page.

, и когда пользователь выбирает @ "abarth", он должен отображаться на странице контроллера корневого каталога (которая является первой).

Ниже мой код страницы контроллера rootview:

- (void)viewDidLoad 
{ 

    self.car = [[NSArray alloc]initWithObjects:@"Make",@"Model",@"Price Min",@"Price Max",@"State",nil]; 


    [super viewDidLoad]; 

} 

-(NSInteger) numberOfSectionInTableView:(UITableView *)tableView 
{ 
    return 1; 
} 

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 
    return [self.car count]; 
} 



-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    static NSString *TextCellIdentifier = @"Cell"; 

    UITableViewCell *cell =[tableView dequeueReusableCellWithIdentifier:TextCellIdentifier]; 
    if (cell==nil) 
    { 
     cell = [[UITableViewCell alloc]initWithStyle:UITableViewCellStyleDefault reuseIdentifier:TextCellIdentifier]; 
     cell.accessoryType = UITableViewCellAccessoryNone; 
     cell.selectionStyle = UITableViewCellSelectionStyleNone; 
    } 

     cell.textLabel.text = [self.car objectAtIndex:[indexPath row]]; 
    cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator; 





     return cell; 
} 



- (void)tableView:(UITableView *)tableView 
didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 





     if (0 == indexPath.row) 
    { 
     NSLog(@"0"); 
     self.detailcontroller.title = @"Make"; 
    } 
    else if (1 == indexPath.row) 
    { 
     NSLog(@"1"); 
     self.detailcontroller.title = @"Model"; 
    } 
    else if (2 == indexPath.row) 
    { 
     NSLog(@"2"); 
     self.detailcontroller.title = @"Price Min"; 
    } 
    else if (3 == indexPath.row) 
    { 
     self.detailcontroller.title = @"Price Max"; 
    } 
    else if (4 == indexPath.row) 
    { 
     NSLog(@"3"); 
     self.detailcontroller.title = @"State"; 
    } 
    [self.navigationController 
    pushViewController:self.detailcontroller 
    animated:YES]; 
} 



following is my detail view page code: 

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    if ([self.title isEqualToString:@"Make"]) 
    { 
     detail = [[NSArray alloc]initWithObjects:@"Any Make",@"Abarth",@"AC",@"ADAYER",@"Adelaide",@"ALFA ROMEO",@"ALLARD",@"ALPINE-RENAULT",@"ALVIS",@"ARMSTRONG", 
        @"ASTON MARTIN",@"AUDI",@"AUSTIN",@"AUSTIN HEALEY",@"Barossa",@"BEDFORD", 
        @"BENTLEY",@"BERTONE",@"BMW",@"BOLWELL",@"BRISTOL",@"BUICK",@"BULLET", 
        @"CADILLAC",@"CATERHAM",@"CHERY",@"CHEVROLET",@"CHRYSLER",@"CITROEN", 
        @"Country Central",@"CSV",@"CUSTOM",@"DAEWOO",@"DAIHATSU",@"DAIMLER", 
        @"DATSUN",@"DE TOMASO",@"DELOREAN",@"DODGE",@"ELFIN",@"ESSEX", 
        @"EUNOS",@"EXCALIBUR",@"FERRARI",nil]; 

     if ([self.title isEqualToString:@"Abarth"]) 
     { 
      detail = [[NSArray alloc]initWithObjects:@"HI", nil]; 
     } 
    } 
    else if ([self.title isEqualToString:@"Model"]) 
    { 
     detail = [[NSArray alloc]initWithObjects:@"Any Model", nil]; 


    } 
    else if ([self.title isEqualToString:@"Price Min"]) 
    { 
     detail = [[NSArray alloc]initWithObjects:@"Min",@"$2,500", 
        @"$5,000", 
        @"$7,500", 
        @"$10,000", 
        @"$15,000", 
        @"$20,000", 
        @"$25,000", 
        @"$30,000", 
        @"$35,000", 
        @"$40,000", 
        @"$45,000", 
        @"$50,000", 
        @"$60,000", 
        @"$70,000", 
        @"$80,000", 
        @"$90,000", 
        @"$100,000", 
        @"$500,000", 
        @"$1,000,000",nil]; 

    } 
    else if ([self.title isEqualToString:@"Price Max"]) 
    { 
     detail = [[NSArray alloc]initWithObjects:@"Max", 
        @"$2,500", 
        @"$5,000", 
        @"$7,500", 
        @"$10,000", 
        @"$15,000", 
        @"$20,000", 
        @"$25,000", 
        @"$30,000", 
        @"$35,000", 
        @"$40,000", 
        @"$45,000", 
        @"$50,000", 
        @"$60,000", 
        @"$70,000", 
        @"$80,000", 
        @"$90,000", 
        @"$100,000", 
        @"$500,000", 
        @"$1,000,000",nil]; 
    } 
    else if ([self.title isEqualToString:@"State"]) 
    { 
     detail = [[NSArray alloc]initWithObjects:@"Any State", 
        @"Australian Capital Territory", 
        @"New South Wales", 
        @"Northern Territory", 
        @"Queensland",    
        @"South Australia", 
        @"Tasmania", 
        @"Victoria", 
        @"Western Australia",nil]; 
    } 
    [self.tableView reloadData]; 
} 

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{ 

    return 1; 
} 

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
{ 

    return [detail count]; 
} 

- (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]; 
    } 

    cell.textLabel.text = [detail objectAtIndex: 
          [indexPath row]]; 


    cell.font = [UIFont systemFontOfSize:14.0]; 
    return cell; 



} 


- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 


    [self.navigationController popViewControllerAnimated:YES]; 

} 

ответ

8

Вам необходимо использовать пользовательские делегаты. Создайте протокол в своем подробном представлении и внедрите его в свой rootview. Выделите выбранную строку как параметр для метода делегирования и из метода делегата, выведите его в текстовое поле.

//something like this 
@interface detailViewController 

// protocol declaration 
@protocol myDelegate 
@optional 
    -(void)selectedValueIs:(NSString *)value; 

// set it as the property 
@property (nonatomic, assign) id<myDelegate> selectedValueDelegate; 

// in your implementation class synthesize it and call the delegate method 
@implementation detailViewController 
@synthesize selectedValueDelegate 
// in your didselectRowAtIndex method call this delegate method 
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 

     [self selectedValueDelegate])selectedValueIs:valueString] ; 
     [self.navigationController popViewControllerAnimated:YES]; 

    } 




@end 

// In your rootViewController conform to this protocol and then set the delegate 

     detailViewCtrlObj.selectedValueDelegate=self; 
//Implement the delegate Method 
    -(void)selectedValueIs:(NSString *)value{ 
     { 
      // do whatever you want with the value string 
     } 
+0

Спасибо, сейчас все в порядке. –

1

Привет вам придется сделать это с помощью протоколов и делегировать Пожалуйста, смотрите мою ссылку on protocol and delegate

вы также можете сделать это путем создания переменного в appdelegate, устанавливая его свойство и получая доступ к нему в любом другом представлении.

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; 
delegate.yourVariable; 
+0

Не делайте эту переменную appDelegate, это ужасно плохая практика. – hahmed

Смежные вопросы

 Смежные вопросы