我现在对Objective-C中的自定义代理流程感到有些沮丧。我已经使用过这种设计模式几次了,并且对其工作原理有很好的理解。我在互联网上搜索了2个小时,试图找出我在这个实例中做错了什么,但没有成功。我还将此实例与我以前使用的正常工作的自定义代理进行了比较,但无法看出任何概念上的差异。所以我们开始吧:
我正在制作一个自定义双表视图(一个表格用于列表,另一个表格用于保存从该列表中选择的内容),以便用户可以进行基本选择。以下是头文件:
请注意,我正在导入ListSelectorViewController.h文件,其中包含协议声明。还要注意,当输入“ ”时,它会自动完成,这意味着它确实看到了它。就像我说的,我以前用完全相同的方式处理其他对象而没有任何问题,现在无法理解这个问题……非常感谢您的任何帮助。
我正在制作一个自定义双表视图(一个表格用于列表,另一个表格用于保存从该列表中选择的内容),以便用户可以进行基本选择。以下是头文件:
#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文件,其中包含协议声明。还要注意,当输入“ ”时,它会自动完成,这意味着它确实看到了它。就像我说的,我以前用完全相同的方式处理其他对象而没有任何问题,现在无法理解这个问题……非常感谢您的任何帮助。
ListSelectorDataSoure
。不只是这个问题吧? - user23743