我不知道這是否被認爲是一個公認的Objective-C實踐,所以我願意接受其他想法。這是主意。我有一個表格是從一個自定義的UITableViewCell獲取單元格。這些單元中的每一個都呈現用戶可以參加的事件。因此,我希望用戶能夠直接從表格視圖將它們添加到他們的日曆中。UITableCell和UIViewController之間的可見性
爲了做到這一點,我在每個表格單元上放了一個按鈕 - 一個「添加到日曆按鈕」。我堅持的是如何將一個動作從這個按鈕連接回UITableView是子視圖的UIViewController。該按鈕是UITableView類的一部分,並且不具有對UIViewController的可見性。
我一直在嘗試實施下面Aaron建議的委託模式。我幾乎在那裏,但仍然有一些連接斷開。以下是我有:
新協議EventDelegate.h
@protocol EventDelegate <NSObject>
- (void) addToCalendar : (NSString *) strDate;
@end
在MyTableCell.h
,我已經加入這個屬性:
@property (nonatomic, strong) id<EventDelegate> eventDelegate;
在MyTableCell.m
,我加入這個方法:
- (IBAction)addToCalendar:(UIButton *)sender
{
NSLog(@"calling addToCalendar delegate %@", _dayAndTime.text);
[self.eventDelegate addToCalendar:_dayAndTime.text];
}
這一切都很好。當我點擊我添加到表單元中的按鈕,我得到的輸出calling addToCalendar delegate Monday, January 13
結束在MyViewController.h
,我改成了這個樣子:
@interface TrainingScheduleViewController : UIViewController <UITableViewDelegate, UITableViewDataSource, EventDelegate>
- (void) addToCalendar:(NSString *)strDate;
@end
最後,在MyViewController.m
我添加的方法身體:
- (void) addToCalendar:(NSString *)strDate
{
NSLog(@"inside delegate");
NSLog(@"%@", strDate);
}
的一部分,我認爲可能是問題出在哪裏亞倫提出加入這一行的代碼:
[tableViewController setEventDelegate:self];
首先,我不確定在哪裏添加這一行。我把它放在viewDidLoad
。編譯器不會讓我逐字鍵入它,這樣我就可以找到最接近的事情是這條線:
[self.tableView setDelegate:self];
也許我需要一個額外的插座?
我必須差不多那裏,但我只是看不到我仍然缺少的東西。誰能幫我?謝謝!
添加自定義委託。當自定義tableview收到「添加到日曆」操作時,它會調用委託方法,傳遞要添加到日曆中的條目的詳細信息。然後讓視圖控制器成爲這個自定義委託的使用者。 – trojanfoe
@ usr55410 - 請參閱下面的答案。它解釋瞭如何使用自定義委託。 – Aaron