В настоящий момент я немного расстроен процессом пользовательского делегата в target-c.Я уже несколько раз использовал шаблон дизайна и довольно хорошо понимаю, как он работает.Я искал в интернете в течение 2 часов, пытаясь выяснить, что я делаю не так в этом случае, и чтобы не преобладать.Я также сравнил свое прошлое использование пользовательских делегатов, которые функционируют должным образом, с этим экземпляром и не видит никакой концептуальной разницы.Итак, мы идем:
Я делаю настраиваемое двойное табличное представление (одну таблицу для списка, а другую для хранения выборов, сделанных из этого списка.), чтобы пользователь мог сделать основные выборы.вот заголовочный файл:
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
@protocol ListSelectorViewDelegate
-(void) listTableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
-(void) selectTableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath;
-(void) listTableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
-(void) selectTableView:(UITableView *)tableView accessoryButtonTappedForRowWithIndexPath:(NSIndexPath *)indexPath;
- (void)listTableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
- (void)selectTableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath;
@end
@protocol ListSelectorDataSource
-(UITableViewCell *)listTableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
-(UITableViewCell *)selectTableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath;
-(NSArray *)sectionIndexTitlesForListTableView:(UITableView *)tableView editStatus:(BOOL) status;
-(NSArray *)sectionIndexTitlesForSelectTableView:(UITableView *)tableView editStatus:(BOOL) status;
-(NSInteger)listTableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;
-(NSInteger)selectTableView:(UITableView *)tableView sectionForSectionIndexTitle:(NSString *)title atIndex:(NSInteger)index;
@end
@interface ListSelectorViewController : UIViewController {
//Delegate
id <ListSelectorViewDelegate> listsDelegate;
id <ListSelectorDataSource> listsDataSource;
//Titles
IBOutlet UINavigationBar *pageNavBar;
IBOutlet UINavigationBar *selectNavBar;
IBOutlet UINavigationBar *listNavBar;
//Tables
IBOutlet UITableView *selectTable;
IBOutlet UITableView *listTable;
//Table Data
NSMutableArray *listItems;
NSMutableArray *selectItems;
//Search Bars
IBOutlet UISearchBar *selectedSearch;
IBOutlet UISearchBar *listSearch;
BOOL listTableIsSearching;
BOOL selectTableIsSearching;
}
@property(nonatomic,assign) id <ListSelectorViewDelegate> listsDelegate;
@property(nonatomic,assign) id <ListSelectorDataSource> listsDataSource;
-(IBAction) newItem:(id)sender;
-(IBAction) selectAll:(id)sender;
-(IBAction) clearSelections:(id)sender;
@end
Обратите внимание на официальные объявления протокола.Также обратите внимание, что это, вместе с файлом .m прекрасно компилируется.Когда я пытаюсь написать класс для принятия протокола, я получаю сообщение об ошибке «Не удается найти объявление протокола для« ListSelectorDataSoure »».Я получаю то же сообщение для «ListSelectorViewDelegate», а также.Вот файл .h для класса делегата:
#import <Foundation/Foundation.h>
#import"ListSelectorViewController.h"
@interface ListSelectorDelegateTemplate : NSObject
<ListSelectorDataSource,ListSelectorViewDelegate>{
}
@end
Обратите внимание, что я импортирую ListSelectorViewController.h, где находятся объявления протокола.Также обратите внимание, что при наборе "" он выполняет автозаполнение, что означает, что он его видит.Как я уже сказал, я сделал это точно таким же образом для других объектов без проблем и не могу обернуть голову вокруг этого ... Любая помощь вообще будет принята с благодарностью