简体   繁体   English

如何通过数组在前一个controller的detailtextlabel中显示一个tableview单元格的文本

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

I have created a controller class named TAddAlarmController which has a tableview which consists of 6 rows.我创建了一个名为 TAddAlarmController 的 controller class ,它有一个由 6 行组成的表格视图。 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. 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其中包含 7 个 static 值。

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 ie TAddAlarmController.我希望当我单击第二个 controller 的任何行时,特定行的单元格内的值应设置为前一个控制器的 detailtextlabel,即 TAddAlarmController。

This is my code:这是我的代码:

This is AddAlarmcontroller.h这是 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这是我的.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

This is TAlarmNewController.h这是 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这是我的.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

In your FirstViewController在你的 FirstViewController

1, keep a member variable(NSString) named detailTextValueFromSecondController. 1、保留一个名为detailTextValueFromSecondController的成员变量(NSString)。

2, create a function named 2、创建一个function命名

-(void)refreshTableToSetDetailText:(NSString *)detailTextValue

Then in your SecondViewController然后在你的 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.使用didSelectRowAtIndexPath ,找出用户选择了哪一行,并将该值存储在NSUserDefaults中,以用于在视图之间进行通信的特定 integer 键。

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

And in the cellForRowAtIndexPath of the previous controller, get the key for the integer并在前面的controller的cellForRowAtIndexPath中,得到integer的key

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.并检查它是否为 99。如果是这种情况,那么您可以确定选择了该特定值,并为单元格分配detailedTextLabel的TextLabel。

Somethings to note:需要注意的事项:

  1. Make sure to reloadData for your tableView in your ViewWillAppear or you cannot see the changes for the detailedText确保在reloadData中为您的 tableView 重新加载数据,否则您无法看到detailedText ViewWillAppear的更改

  2. Set the value of the chosen row in a NSString property of the second class.在第二个 class 的NSString属性中设置所选行的值。 Make sure to reference that class in the the previous view so that you are able to grab the value from that NSString .确保在上一个视图中引用 class ,以便您能够从该NSString中获取值。

  3. NSUserDefaults is for communicating between two views. NSUserDefaults用于在两个视图之间进行通信。 Check for NSUserDefaults if a row was chosen.如果选择了一行,请检查 NSUserDefaults。 If a row was not chosen, then you need not allocate a detailedTextLabel.如果未选择行,则无需分配详细的TextLabel。 On the otherhand, if a row was selected, you will need to allocate it..另一方面,如果选择了一行,则需要分配它。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何在我以前的控制器的详细文本标签中显示tableview单元格的多个选择值 - How to display the multiple select values of tableview cell in the detail text label of my previous controller 如何在上一个tableview控制器的detailtext标签中显示选定的选择器日期 - how to display the selected picker date in the detailtext label of previous tableview controller FPPopover cell.detailTextLabel.text - FPPopover cell.detailTextLabel.text 如何在iPhone中的detailTextLabel中增加相对于文本大小的单元格大小。 - How to increase the cell size with respect to the text size in detailTextLabel in iPhone. 如何调整textLabel,detailTextLabel的位置并在tableview中切换? - How to adjust position of textLabel, detailTextLabel and switch in tableview? cell.detailTextLabel.text无法正常工作...为什么 - cell.detailTextLabel.text not working… why 如何在表格视图单元格中突出显示文本? - How to highlight a text in tableview cell? 快速iOS详细信息中的TableView - tableview in swift ios detailTextLabel 如何获取详细视图控制器以显示与TableView上选定的“单元格”相关的文本? - How do I get the Detail View Controller to show text relevant to the “cell” selected on the TableView? 无法在每一行的cell.detailtextlabel中显示值 - Not able to display values in cell.detailtextlabel for each row
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM