2010-08-30 51 views
0

我有单独的文件为UITableViewDataSource的UITableViewDelegateUITableViewDataSource加载完成信号到的UITableViewDelegate

我实现了“下拉刷新”功能的一个UITableView并希望从UITableViewDataSource发出信号UITableViewDelegate停止加载指示器转动。

我想知道什么是最好的方式发送UITableViewDataSource的UITableViewDelegate之间的信号,或是否有更好的方式来构建这个,因为我觉得我打破了一些抽象的障碍。

我在数据源是什么:

if([tableView.delegate respondsToSelector: @selector(dataSourceDidFinishLoadingNewData)]){ 
    [tableView.delegate dataSourceDidFinishLoadingNewData]; 
} 

,但我得到“dataSourceDidFinishLoadingNewData”在协议的警告没有发现,因为,我想,该功能不作为的方法中声明的UITableViewDelegate

+0

您是否只为数据源和委托使用单个控制器?我不会太担心混合两者。它几乎已经感觉到它们是一样的(事实上在任何UITableViewController子类中,它们都是)。 – 2010-08-30 21:12:39

+0

在我目前的设置下,我在一个视图控制器下有两个UITableViews,所以我有两个数据源和一个委托 - 所以我宁愿保留单独的文件 – 2010-08-31 01:48:45

回答

1

只是一个答案;当使用:

if([object respondsToSelector:@selector(someMethod)]){ 
    [object someMethod]; 
} 

模式,你可以用这个来代替:

if([object respondsToSelector:@selector(someMethod)]){ 
    [object performSelector:@selector(someMethod)]; 
} 

可能有点冗长,但它不会给你任何警告。

+0

好的通话,你知道这是为什么吗? – 2010-08-31 01:53:42

+1

这是因为performSelector只知道在运行时调用哪个方法。这意味着在编译期间,它不能检测某个消息是否在接口中列出。这是一把双刃剑。 – 2010-08-31 02:45:55

0

在保持事物完全抽象的同时,你可以做到这一点。通过tableViews委托属性调用委托的另一种方法是交换保留引用。但是,您甚至可以避免使用通知来通知委托人已完成加载的情况下保持对每个其他对象的引用的需要。

检查NSNotificationCenter了解更多信息。

+0

雅,我认为这是我最终会做的,谢谢。 – 2010-08-31 01:51:38

1

也许你知道,但有多个开源实现拉到刷新。你可能想在自己做之前先看看那些。这里是一个(只是Google上的第一个):http://github.com/leah/PullToRefresh

+0

谢谢,我正在使用这个版本:http://github.com/enormego/EGOTableViewPullRefresh – 2010-08-31 01:50:20