开发者

How to display the text of one tableview cell in the detailtextlabel of previous controller through array

开发者 https://www.devze.com 2023-03-21 16:59 出处:网络
I have created acontroller class named TAddAlarmController which has atableview which consists of 6 rows. When I click on the second row it navigates to a page which is a new controller name TAlarmNew

I have created a controller class named TAddAlarmController which has a tableview which consists of 6 rows. When I click on the second row it navigates to a page which is a new controller name TAlarmNewController which is a tableviewcontroller and in which I have created a nsmutablearray and populated that array with 7 static values so when the second controller is displayed the tableview is displayed with 7 static values in it.

I want that when I click on any row of second controller the value that is present inside the cell of the paticular row should be set to detailtextlabel of the previouscontroller i.e TAddAlarmController.

This is my code:

This is 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

This is my .m file

    #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

This is 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

This is my .m file

    #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 开发者_如何学Pythonalloc]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


In your FirstViewController

1, keep a member variable(NSString) named detailTextValueFromSecondController.

2, create a function named

-(void)refreshTableToSetDetailText:(NSString *)detailTextValue

Then in your SecondViewController

Inside

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

place the following code:

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

     }


Using the didSelectRowAtIndexPath , find out which row was chosen by the user, and store that value in NSUserDefaults for a specific integer key for communicating between views.

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

And in the cellForRowAtIndexPath of the previous controller, get the key for the integer

NSInteger myInt = [chosenrow integerForKey:StringYouWantToDisplay];

And check if it is 99. If this is the case then you can be certain that that particular value was chosen, and allocate the detailedTextLabel for the cells.

Somethings to note:

  1. Make sure to reloadDatafor your tableView in your ViewWillAppear or you cannot see the changes for the detailedText

  2. Set the value of the chosen row in a NSString property of the second class. Make sure to reference that class in the the previous view so that you are able to grab the value from that NSString.

  3. NSUserDefaults is for communicating between two views. Check for NSUserDefaults if a row was chosen. If a row was not chosen, then you need not allocate a detailedTextLabel. On the otherhand, if a row was selected, you will need to allocate it..

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号