2012-03-31 39 views
3

所以我遇到這個問題已經讓我發瘋了好幾個小時,而且我感覺很蠢,因爲它看起來很簡單。我一直在尋找網絡和亂搞過去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日

回答

0

如果您的視圖控制器是由一個故事板加載,然後就筆尖什麼將是一個壞主意。 :-)

處理故事板轉換的神奇方法是prepareForSeque :.看看它; segue引用了所涉及的控制器,並且sender參數將您引向啓動該操作的控件。

編輯:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 
    EventViewController *next = (EventViewController *)[segue destinationViewController]; 
    next.headerLabel.text = @"Hello!"; 
} 

在實際的代碼,你將需要使用發件人找出什麼實際信息,通過詢問表發送者的索引路徑或那樣的事情經過。

+0

雅我試過了,我仍然得到相同的結果。我試着直接使用eventViewController.headerLabel.text = theDate設置headerLabel; (它只是給了我一個空字符串)我也嘗試在prepareForSegue中使用自定義init方法,並且我只在輸出窗口中得到了結果 – 2012-03-31 13:12:39

+0

因此在我的自定義init方法中取出[super initWithNibName]?我最初只是把它作爲一個方法: - (void)initEventTime:(NSString *)eventTime和Name:(NSString *)eventName andDate:(NSString *)eventDate;但這也沒有工作 – 2012-03-31 13:15:59

+0

,我也嘗試設置segue的標識符,但這也沒有工作,我喜歡編程,但我也可以令人沮喪 – 2012-03-31 13:20:18

相關問題