我解決了我的問題,這裏是我如何解決它。
在我回答我的問題之前,我對Objective-C和麪向對象編程還是很陌生,所以我的詞彙並不知道如何描述我嘗試解釋的一些東西。所以在閱讀時要考慮到這一點。
在時間模式下使用UIDatePicker,即進入您的NIB/XIB文件並將您的UIDatePicker對象設置爲'time',將只返回時間。這是我出錯的地方。
使用NSDateComponent或任何NSCalendar方法將帶出選擇器的日期組件。因此你會在1970年1月1日的NSLog回報中看到例子。
我不得不尋找一種新的方式來完成我的數學和操縱我從拾取器中獲得的時間。
我最終使用的是NSTimeInterval,dateByAddingTimeInterval和timeIntervalSinceDate。研究表明,NSTimeInterval也是一個浮點型,所以我用float來做一些數學運算。
下面一個例子 -
if (indexPath.row == [labelArray indexOfObjectIdenticalTo:@"Clock Out"])
{
NSTimeInterval diffClockInOutToLunch = [outToLunch timeIntervalSinceDate:clockIn];
float remainingInTheDay = 28800 - diffClockInOutToLunch;
self.clockOut = [inFromLunch dateByAddingTimeInterval:remainingInTheDay];
cell.detailTextLabel.text = [self.dateFormatter stringFromDate:clockOut];
self.clockOutIndex = indexPath;
return cell;
}
我使用一個TableView中顯示我的田地。當這個'if'語句被觸發時,它將填充顯示「Clock Out」的行的detailTextLabel。在視覺上,「Clock Out」這個短語將位於該行的左側,時間將在右側。
diffClockInOutToLunch被定義爲NSTimeInterval類型。正在執行的操作是timeIntervalSinceDate,它實際上是從clockIn的值中減去outToLunch的值。想象一下,在晚上11點和鐘點在上午6點。這個差別是5個小時。 NSTimeInterval僅將值存儲爲秒,因此5小時的差值爲18000秒。
然後,我使用float執行正常的數學運算。在這種情況下,我想知道在工作日中還有多少小時。假定一天工作的時間是8小時。由於NSTimeInterval返回秒數,因此我將8小時轉換爲秒(28,800秒),然後從28800中減去diffClockInOutToLunch。現在remainingInTheDay等於10800或3小時。
我執行的下一個操作是將clockOut設置爲我們工作日完成的時間。爲此,我使用dateByAddingTimeInterval操作,它也是一個NSDate方法,因此無論它返回的是日期/時間格式。在這個操作中,我們在inFromLunch中添加remainingInTheDay(10,800秒)(例如上午11:30)。我們的clockOut時間現在是下午2:30,然後通過我的DateFormatter發送,並作爲字符串返回到TableView的單元格中,並存儲起來供以後使用。
這裏是另外一個例子,從我的代碼進一步下跌 -
- (void)clockInChanged
{
// Set clockIn value
self.clockIn = self.pickerView.date;
// Change the outToLunch time
self.outToLunch = [self.pickerView.date dateByAddingTimeInterval:5*60*60];
UITableViewCell *outToLunchCell = [self.tableView cellForRowAtIndexPath:outToLunchIndex];
outToLunchCell.detailTextLabel.text = [self.dateFormatter stringFromDate:outToLunch];
// Change the inFromLunch time
self.inFromLunch = [outToLunch dateByAddingTimeInterval:30*60];
UITableViewCell *inFromLunchCell = [self.tableView cellForRowAtIndexPath:inFromLunchIndex];
inFromLunchCell.detailTextLabel.text = [self.dateFormatter stringFromDate:inFromLunch];
// Change the clockOut time
NSTimeInterval diffClockInOutToLunch = [outToLunch timeIntervalSinceDate:clockIn];
float remainingInTheDay = 28800 - diffClockInOutToLunch;
self.clockOut = [inFromLunch dateByAddingTimeInterval:remainingInTheDay];
UITableViewCell *clockOutCell = [self.tableView cellForRowAtIndexPath:clockOutIndex];
clockOutCell.detailTextLabel.text = [self.dateFormatter stringFromDate:clockOut];
}
在這個例子中,我們先前已經決定,關於該行「時鐘在」時選擇(「觸摸的內心,」如果你會),我們下降到這種方法。
這種方法會發生什麼,只要使用選取器更改clockIn,outToLunch,inFromLunch和clockOut中顯示的時間自動更新並顯示。
這個例子顯示我們捕獲picker(self.pickerView.date)的值爲clockIn。然後,我們使用clockIn來播種我們的dateByAddingTimeInterval的混亂等等。
所以。這就是我如何使用UIDatePicker(設置爲時間模式)管理自己的時間。
簡短的回答是我正在使用錯誤的方法來處理我的選擇器正在轉動。
我希望這可以幫助你,並希望它會在這裏,如果我再次需要它;)