Вопрос по xcode, objective-c, iphone – Как передать данные обратно из контроллера детального вида в uitableview?

6

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

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

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

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

enter image description here  изображение к моей странице детали.

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

Ниже приведен мой код страницы контроллера 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];

}

Ваш Ответ

2   ответа
1

Пожалуйста, смотрите мою ссылкупо протоколу и делегату

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

YourAppDelegate *appDelegate = (YourAppDelegate *)[[UIApplication sharedApplication] delegate];
delegate.yourVariable;
Не делайте это appDelegate переменным способом, это ужасно плохая практика.
8

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

//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
       }
Спасибо, теперь все в порядке. Nilesh .S. Joshi

Похожие вопросы