所以我遇到這個問題已經讓我發瘋了好幾個小時,而且我感覺很蠢,因爲它看起來很簡單。我一直在尋找網絡和亂搞過去3個小時的代碼,我仍然無法弄清楚:(發送從UITableViewController到UIViewController的NSString對象(使用情節串連圖板)問題
在我開始之前,我使用Xcode 4.3.1並在iOS 5.1( 。兩個模擬器和物理設備)
所以這是我迄今所做的:
- 用故事板到我所有的意見 自己的看法
- 一個是一個UITableViewController連接,並將其鏈接到一個UIViewController(使用'push',並且它在2個視圖之間來回切換)
- 的子類的UITableViewController被稱爲ScheduleViewController
- 的UIViewController子類被稱爲EventViewController
- 我已經填充我所有的章節和表格單元格與適當的內容(我使用爲textLabel和detailTextLabel(這不是一個問題) - 對於UIViewController中,我只加了標籤,並生成一個IBOutlet名爲標籤:headerLabel
這就是我試圖完成:
- 當用戶在ScheduleViewController中單擊一個表格單元格時,轉到EventViewController(直到此時它可以工作!)
- 根據所選表格單元格,將textLabel.text,detailTextLabel.text和Section Header文本傳遞給EventViewController(類型的作品,所有的值與NSLog出現,但這就是它???)
- 我覺得最好從小開始,所以我將首先將headerLabel文本(在EventViewController中)設置爲Section Header文本(在ScheduleViewController中) - 當我使用NSLog檢查值時,這似乎仍然有效,但是當我嘗試設置headerLabel的實際文本時,它只顯示空字符串:(
這裏是我堅持和我所到目前爲止已經試過:
那麼首先我已經做了完全一樣的(除了它是與iOS 4,我並沒有用故事板) ,我做的是在UITableViewController的didSelectRowAtIndexPath:方法中,我只是做了類似的事情(並且工作正常:)):
EventViewController * eventViewController = [[EventViewController alloc] initWithNibName:@「EventViewController」bundle:nil] ; eventViewController.headerLabel.text = stringToPass;
所以當然,這是我嘗試的第一件事,當然它不起作用,因爲這就是編程是如何哈哈。
所以接下來我創建了我的EventViewController一個自定義的init方法:
- (ID)initEventTime:(的NSString *)EVENTTIME andName:(的NSString *)eventName的andDate:(的NSString *)EVENTDATE;
首先,我試着給它在didSelectRowAtIndexPath方法:在ScheduleViewController方法,並且它種工作,這裏是EventViewController方法:
//Method to initialize event time, name, and date.
(ID)initEventTime:(的NSString *)eventTime和Name:(NSString *)eventName andDate:(NSString *)eventDate { self = [super initWithNibName:@「EventViewController」bundle:nil]; (自己) { NSLog(@「my custom」); //定製初始化
// NSLog(@「%@」,eventTime); // NSLog(@「%@」,eventName); // NSLog(@「%@」,eventDate); NSString * mystr = [NSString stringWithFormat:@「%@」,eventDate]; NSLog(@「1:%@」,mystr); [self setTheEventDate:eventDate]; NSString * mystr2 = [self getTheEventDate]; NSLog(@「2:%@」,mystr2); headerLabel.text = [self getTheEventDate]; NSLog(@「label:%@」,headerLabel.text); NSLog(@「3:%@」,eventDate);
//self.headerLabel.text = [NSString stringWithFormat:@「%@」,eventDate]; } return self; }
這裏是我如何被調用的didSelectRowAtIndexPath方法的方法:(在ScheduleViewController)方法:
EventViewController * EVC = [[EventViewController的alloc] initEventTime:TIMEVALUE andName:eventValue andDate:DATEVALUE ]。
因此,正如你可以看到上面我首先檢查值是否出現在輸出窗口使用NSLog,他們都做了!
- 但是,當我試圖設置headerLabel文本仍返回一個空字符串
- 於是我試圖創造EventViewController一個getter和setter(你可以在上面看到),稱爲getTheEventDate和setTheEventDate。
- 在這些方法中,我只需使用eventDate參數setTheEventDate,然後獲取值;並再次出現在輸出窗口,但一個空字符串headerLabel
- 我也嘗試使用NSLog獲取eventDate的值,NSLog獲取headerLabel的文本值,另一個NSLog以確保eventDate不是空值。
下面是在輸出窗口輸出:
2012-03-31我的自定義 2012-03-31 7月28日 2012-03-31 2:7月28日 2012-03-31標籤: (空) 2012-03-31 3:7月28日
雅我試過了,我仍然得到相同的結果。我試着直接使用eventViewController.headerLabel.text = theDate設置headerLabel; (它只是給了我一個空字符串)我也嘗試在prepareForSegue中使用自定義init方法,並且我只在輸出窗口中得到了結果 – 2012-03-31 13:12:39
因此在我的自定義init方法中取出[super initWithNibName]?我最初只是把它作爲一個方法: - (void)initEventTime:(NSString *)eventTime和Name:(NSString *)eventName andDate:(NSString *)eventDate;但這也沒有工作 – 2012-03-31 13:15:59
,我也嘗試設置segue的標識符,但這也沒有工作,我喜歡編程,但我也可以令人沮喪 – 2012-03-31 13:20:18