2014-03-12 49 views
0

我看起來是一個簡單的問題。根據從特定表格視圖中查找來執行特定操作(例如設置UIDatePicker的日期)

我有一個表格視圖控制器(2選項卡欄的一部分),由用戶填充導航欄中的加號按鈕並填寫一些信息。這將用戶帶到「添加條目」視圖控制器。

我有第二個表格視圖(選項卡欄的第二個選項卡),它也有一個導航欄中的加號按鈕,也稱爲添加條目。但是,在這個表格視圖中,我已經填充了一個textField和datePicker來與它來自的信息相關聯。

在prepareForSegue中,我設置了日期和文本字段。這樣可行。但是,我並不完全確定將代碼放入添加條目的位置,以說「如果您從標籤1調用,則將所有內容都留空,如果您從標籤2調用,則設置日期選擇器」。

在prepareForSegue:

if ([segue.identifier isEqualToString:@"Create New Entry From Event"]) 
{ 
    AddEntryViewController *addEntryViewController = (addEntryViewController *)segue.destinationViewController; 
    [addEntryViewController setSelectedEvent:self.occasion.title]; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"MMMM d, yyyy"]; 
    NSDate *dateFromString = [[NSDate alloc] init]; 
    dateFromString = [dateFormatter dateFromString:sectionTitle]; 
    [addEntryViewController setSelectedDate:dateFromString]; 
} 

的setSelectedDate是:

- (void)setSelectedDate:(NSDate *)selectedDate 
{ 
    _selectedDate = selectedDate; 
} 

如果我設置viewWillAppear中來:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    self.occasionTextField.text = self.selectedEvent; 
    [self.datePicker setDate:self.selectedDate animated:YES]; 
} 

調用從添加條目時,我得到一個崩潰任何其他屏幕,但這當然是不可取的。

所以我需要一種方式來保持所有文本字段和日期選擇器在應用程序中的任何位置調用時(沒有self.datePicker行時),並且只在從該特定表中調用時設置datePicker視圖。

對此的任何想法都會非常棒!

+0

在添加條目視圖控制器中創建另一個BOOL變量,並將其設置在prepareForSegue中,然後檢查viewWillAppear。 – BoranA

+0

@BoranA非常感謝您的答覆,這確實有道理。我試圖找出一種方法來在準備中設置它,然後在viewWillAppear中檢查它 - 請問我能否爲您解決一些潛在的示例代碼,以便我能夠實現這一目標?這聽起來像是這樣會起作用,然後我可以將您的答案標記爲已接受 – amitsbajaj

+0

對不起@博蘭娜 - 我有這個工作與你的建議,這是一個好消息。然而奇怪的是,它在模擬器上工作,但不在設備上。在設備上,由於未捕獲異常'NSInternalInconsistencyException',原因:'無效參數不令人滿意:日期'作爲錯誤,我得到終止應用程序。這是非常奇怪的行爲。你有什麼想法,爲什麼它會在模擬器上工作,但不在設備上? – amitsbajaj

回答

1

在interface中定義一個BOOL就像這樣。

@property (assign, nonatomic) BOOL fromTabOne; 

,並添加

@synthesize fromTabOne; 
在viewWillAppear中

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 
    if (!self.fromTabOne) { 
     self.occasionTextField.text = self.selectedEvent; 
     [self.datePicker setDate:self.selectedDate animated:YES]; 
    } 
} 

在prepareForSegue

if ([segue.identifier isEqualToString:@"Create New Entry From Event"]) 
{ 
    AddEntryViewController *addEntryViewController = (addEntryViewController *)segue.destinationViewController; 
     [addEntryViewController setSelectedEvent:self.occasion.title]; 

    if (viewOne) { //if you're on first tab 
     [addEntryViewController setFromTabOne:YES]; 
    } else { 
     [addEntryViewController setFromTabOne:NO]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"MMMM d, yyyy"]; 
     NSDate *dateFromString = [[NSDate alloc] init]; 
     dateFromString = [dateFormatter dateFromString:sectionTitle]; 
     [addEntryViewController setSelectedDate:dateFromString]; 
    } 
} 

您在評論中提及該錯誤可能由零NSDate的或錯誤的區域設置造成的。設置前進行零檢查。我猜NSDateFormatter不能格式化你的字符串。

+0

親愛的@BoranA--非常感謝您的留言,這實際上正是我在代碼中所看到的,它的功能就像一個魅力。非常感謝這一點,絕對如你所說,現場造成這裏的問題。我將不得不找出這一個,但如果需要的話會提出另一個問題。現在,非常感謝您對此的幫助。這非常有幫助! – amitsbajaj

+0

歡迎@Lavanya – BoranA