在我的iOS應用程序中,我有一個自定義UITableViewCell
,它是我的FirstViewController
中TableView的一部分。在FirstViewController中,我有一個對象數組,它對應於填充行,然後是該數組中具有屬性的對象。從FirstViewController在自定義UITableViewCell中訪問屬性
我在每個單元格中都有一個計時器,我需要從相應對象的屬性中獲取計時器的長度。我試過導入FirstViewController.h
,但無論如何我都會收到錯誤「property not found on object of type
」。
我已經在FirstViewController的cellForRowAtIndexPath
方法中創建和配置了對象,但我希望能在TableViewCell.m
的方法中使用它。
有沒有一種方法可以使用TableViewCell中的數組或對象?還是應該在FirstViewController中實現該方法?
EDIT#1:
我移動cell.timer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:cell selector:@selector(startTimer) userInfo:nil repeats:YES];
到FirstViewController的cellForRow...
方法。現在計時器運行所需的時間,但不再由按鈕啓動。它在TableView加載時立即運行,並在每次重新加載TableView時重新啓動。
這裏是我的ATCTableViewCell.h
文件:(更新與編輯#2)
#import <UIKit/UIKit.h>
#import "ATCFirstViewController.h"
@interface ATCTableViewCell : UITableViewCell
- (void)startTimer;
// Contents moved to cellForRow... -> - (IBAction)playTimer:(id)sender;
@property (weak, nonatomic) IBOutlet UILabel *titleLabel;
@property (weak, nonatomic) IBOutlet UILabel *timeLabel;
@property (weak, nonatomic) IBOutlet UIButton *playButton;
@property (weak, nonatomic) IBOutlet UIButton *pauseButton;
@property NSTimer *timer;
@property int secondsCount; // initially the length in seconds and then decreased
@end
編輯#2:
定時器的是,在startTimer
方法改變標籤的減量定時器這是在ATCTableViewCell.m
。此標籤是此時單元格的屬性以及另一個標籤和按鈕。我將致力於將事物移動到對象類,而不是將它們作爲單元格的屬性。
這裏是startTimer
方法:
- (void)startTimer {
self.secondsCount--;
int hours = self.secondsCount/3600;
int minutes = (self.secondsCount/60) - (hours * 60);
int seconds = self.secondsCount - (hours * 3600) - (minutes * 60);
NSString *timerOutput = [NSString stringWithFormat:@"%02d:%02d:%02d", hours, minutes, seconds];
self.timeLabel.text = timerOutput;
if (self.secondsCount == 0) {
[self.timer invalidate];
self.timer = nil;
}
}
這是我ATCObject.h
文件:
#import <Foundation/Foundation.h>
@interface ATCObject : NSObject
@property NSString *title;
@property int lengthInSeconds;
@property int initialHours;
@property int initialMinutes;
@end
感謝
認爲它這樣。單元格只是顯示「模型數據」的「視圖」。模型和觀點應儘可能獨立生活。有一個「控制器」層,它接受模型數據,並將其提供給一個視圖來顯示。 tableView委託類是這個實例中的控制器(FirstViewController)。你的細胞應儘可能少做。它有幾個只顯示數據的視圖。我仍在考慮解決這個問題的最佳方法,因此我現在的答案可能不正確。 – Justin
不知道你跟蹤的對象是如何設置的,很難確定如何進行。計時器在做什麼?這是遞減計數器?那個計數器是否對應一個標籤,間隔是多少,以及您的預期結果是什麼 – Justin
現在我認爲NSTimer對象應該存在於您的自定義對象中,而不是單元格中。我現在也在想,CustomObject應該有一個對單元格的引用,而不是相反。這樣,自定義對象可以更新自己的屬性,然後讓單元更新其視圖,而不是查詢對象的單元以詢問顯示內容。 – Justin