Как отобразить текст одной ячейки табличного представления в элементе texttextlabel предыдущего контроллера через массив - PullRequest
0 голосов
/ 21 июля 2011

Я создал класс контроллера с именем TAddAlarmController, который имеет табличное представление, состоящее из 6 строк.Когда я щелкаю по второй строке, она переходит на страницу с новым именем контроллера TAlarmNewController, которая является tableviewcontroller и в которой я создал nsmutablearray и заполнил этот массив 7 статическими значениями, поэтому при отображении второго контроллера отображается табличное представлениес 7 статическими значениями в нем.

Я хочу, чтобы, когда я щелкаю по любому ряду второго контроллера, значение, которое присутствует внутри ячейки патикульного ряда, было установлено в detailtextlabel предыдущего контроллера, т.е. TAddAlarmController.

Это мой код:

Это AddAlarmcontroller.h

    #import <UIKit/UIKit.h>

    @class StopSnoozeAppDelegate;
    @class Alarm;
    @class TAlarmNewController;
    @interface TAddAlarmController : UITableViewController {

        StopSnoozeAppDelegate *app;
        IBOutlet UITableView *tblView;
        NSDateFormatter *dateFormatter;
        NSUndoManager *undoManager;
        Alarm *am;
        TAlarmNewController *anew;
    }
    @property(nonatomic,retain)NSDateFormatter *dateFormatter;
    @property (nonatomic,retain)Alarm *am;
    @property (nonatomic,retain)NSUndoManager *undoManager;
    @end

Это мой файл .m

    #import "TAddAlarmController.h"

    #import "Alarm.h"
    #import "TAlarmNewController.h"


    @implementation TAddAlarmController
    @synthesize dateFormatter;
    @synthesize am;
    @synthesize undoManager;



    #pragma mark -
    #pragma mark View lifecycle




    - (void)viewDidUnload {
        // Release any properties that are loaded in viewDidLoad or can be recreated lazily.
        self.dateFormatter = nil;
    }


    - (void)viewWillAppear:(BOOL)animated {
        [super viewWillAppear:animated];
        [self.tableView reloadData]; 
    }


    #pragma mark -
    #pragma mark Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        // Return the number of sections.
        return 1;
    }


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        // Return the number of rows in the section.
        return 6;
    }


    - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
    {
        return 44;
    }




    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

        static NSString *CellIdentifier = @"Cell";
        /*
         Dequeue or create and then configure a table cell for each attribute of the book.
         */
        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
        if (cell == nil) {
            cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellIdentifier] autorelease];
            //cell.editingAccessoryType = UITableViewCellAccessoryDisclosureIndicator;
            cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
        }


        switch (indexPath.row) {
            case 0: 
                cell.textLabel.text = @"Time";
                break;
            case 1: 
                cell.textLabel.text = @"Repeat";
                break;
            case 2:
                cell.textLabel.text = @"Sound";
                break;

            case 3:
                cell.textLabel.text = @"Snooze Interval";
                break;

            case 4:
                cell.textLabel.text = @"Alarm Message";
                break;

            case 5:
                cell.textLabel.text = @"Snooze Penalty";
                break;
        }
        return cell;
    }




    #pragma mark -
    #pragma mark Table view delegate

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




        TAlarmNewController *controller = [[TAlarmNewController alloc]initWithNibName:@"TAlarmNewController" bundle:nil];

        switch (indexPath.row) {
            case 0:
                controller.editedObject = @"Time";

                break;
            case 1:

                [self.navigationController pushViewController:controller animated:YES];
                [controller release];

            default:
                break;
        }

     }




    - (NSDateFormatter *)dateFormatter {    
        if (dateFormatter == nil) {
            dateFormatter = [[NSDateFormatter alloc] init];
            //[dateFormatter setDateStyle:NSDateFormatterMediumStyle];
            [dateFormatter setTimeStyle:NSDateFormatterNoStyle];
        }
        return dateFormatter;
    }

    - (void)dealloc {
        [super dealloc];
    }


    @end

Это TAlarmNewController.h

    @class TAddAlarmController;

    @interface TAlarmNewController : UITableViewController {
        IBOutlet UITableView *tblView;
        UIDatePicker *datePicker;
        id editedObject;


            TAddAlarmController *Addalarm;


        NSMutableArray *days;//this is the array where i am storing 7 values statically

    }
    @property (nonatomic,retain) IBOutlet UITableView *tblView;
    @property(nonatomic,retain) IBOutlet UIDatePicker *datePicker;

    @property (nonatomic, retain) id editedObject;
    @property(nonatomic,retain)NSMutableArray *days;
    @property (nonatomic, retain, readonly) TAddAlarmController *Addalarm;
    -(IBAction)cancel;
    -(IBAction)save;
    @end

Это мой .m файл

    #import "TAlarmNewController.h"

    #import "TAddAlarmController.h"


    @implementation TAlarmNewController

    @synthesize  editedObject,datePicker, tblView,days,Addalarm;

    #pragma mark -
    #pragma mark View lifecycle


    - (void)viewDidLoad {

        UIBarButtonItem * saveButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:@selector(save)];
        self.navigationItem.rightBarButtonItem = saveButton;
        [saveButton release];

        UIBarButtonItem *cancelButton = [[UIBarButtonItem alloc]initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(cancel)];
        self.navigationItem.leftBarButtonItem = cancelButton;
        [cancelButton release];

        days =[[NSMutableArray alloc]initWithObjects:@"Every Monday",@"Every Tuesday",@"Every Wednesday",@"Every Thursday",@"Every Friday",@"Every Saturday",@"Every Sunday0",nil];

        [super viewDidLoad];


    }


    - (TAddAlarmController *)Addalarm {
        if (Addalarm == nil) {
            Addalarm = [[TAddAlarmController alloc] initWithStyle:UITableViewStyleGrouped];
        }
        return Addalarm;
    }



    -(IBAction)save{

        [self.navigationController popViewControllerAnimated:YES];
    //
    }

    -(IBAction)cancel{
        [self.navigationController popViewControllerAnimated:YES];
    }



    #pragma mark -
    #pragma mark Table view data source

    - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
        // Return the number of sections.
        return 1;
    }


    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
        // Return the number of rows in the section.
        return [days count];
    }


    // Customize the appearance of table view cells.
    - (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] autorelease];
        }

        cell.textLabel.text = [days objectAtIndex:indexPath.row];
        // Configure the cell...

        return cell;
    }





    #pragma mark -
    #pragma mark Table view delegate

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

    }




    - (void)dealloc {
        [datePicker release];

        [super dealloc];
    }


    @end

Ответы [ 2 ]

0 голосов
/ 21 июля 2011

Используя didSelectRowAtIndexPath, выясните, какая строка была выбрана пользователем, и сохраните это значение в NSUserDefaults для определенного целочисленного ключа для связи между представлениями.

NSUserDefaults *chosenrow = [NSUserDefaults standardUserDefaults];
[chosenrow setInteger:99 forKey: StringYouWantToDisplay];

И в cellForRowAtIndexPath предыдущего контроллера, получите ключ для целого числа

NSInteger myInt = [chosenrow integerForKey:StringYouWantToDisplay];

и проверьте, равен ли он 99. Если это так, то вы можете быть уверены, что это конкретное значение было выбрано, и выделить detailedTextLabel для ячеек.

Что следует отметить:

  1. Убедитесь, что reloadData для вашего TableView в вашем ViewWillAppear, или вы не можете видеть изменения дляdetailedText

  2. Установите значение выбранной строки в свойстве NSString второго класса.Обязательно укажите этот класс в предыдущем представлении, чтобы можно было извлечь значение из этого NSString.

  3. NSUserDefaults - для связи между двумя видами.Проверьте NSUserDefaults, если строка была выбрана.Если строка не была выбрана, вам не нужно выделять подробный текстовый ярлык.С другой стороны, если строка была выбрана, вам нужно будет выделить ее ..

0 голосов
/ 21 июля 2011

В вашем FirstViewController

1, сохраняйте переменную-член (NSString) с именем detailTextValueFromSecondController.

2, создайте функцию с именем

-(void)refreshTableToSetDetailText:(NSString *)detailTextValue

Тогда в вашем SecondViewController

Внутри

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

введите следующий код:

for (int i =0; i < [[self.navigationController viewControllers] count]; i++)
            {
                UIViewController *aController = [[self.navigationController viewControllers] objectAtIndex:i];

                if ([aController isKindOfClass:[FirstViewController class]])
                {
                   FirstViewController *aFirstViewController = (FirstViewController *)aController;
                   [aFirstViewController refreshTableToSetDetailText:yourstringtosetondetaillabel];
        [self.navigationController popToViewController:aController animated:YES];
                }

     }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...