Iphone TTPhotoViewController:只有在刷卡后才能加载图像
我试图在一个示例iPad应用程序中实现Iphone TTPhotoViewController:只有在刷卡后才能加载图像,iphone,ipad,three20,ttphotoviewcontroller,Iphone,Ipad,Three20,Ttphotoviewcontroller,我试图在一个示例iPad应用程序中实现TTPhotoViewController。我已经正确地实现了TTPhotoSource和TTPhoto协议。TTPhotoViewController确实显示图像,但只有在刷卡后才会显示 下面选项卡栏中的左右按钮似乎根本不起作用,它们从不更改显示的图像。当到达最后一张或第一张图像时,UIActivityIndicatorView将不会显示,也不会验证左右按钮 我正在将TTPhotoViewController的子类初始化为UINavigationContr
TTPhotoViewController
。我已经正确地实现了TTPhotoSource
和TTPhoto
协议。TTPhotoViewController
确实显示图像,但只有在刷卡后才会显示
下面选项卡栏中的左右按钮似乎根本不起作用,它们从不更改显示的图像。当到达最后一张或第一张图像时,UIActivityIndicatorView
将不会显示,也不会验证左右按钮
我正在将TTPhotoViewController
的子类初始化为UINavigationController
对象的rootViewController,并将其添加到视图中
这排除了这里面临的问题的可能性:
我还缺什么?有人遇到过类似的问题并找到了解决办法吗
谢谢,
Raj经过一些调试,我发现了问题,这只是一个快速修复: 在Three20UI项目的TTModelViewController类中,找到方法
-refresh
并注释if条件:
if (_isViewAppearing)
最终将调用以前未调用的-updateView
方法
这是一个快速解决方案,必须调查bool:
\u isview稍后出现的问题。也有同样的问题。TTPhotoSource需要在完成加载后将modelDidFinishLoad:发送给其代理。。。否则,TTPhotoViewController会假定它还没有准备好
然而,这还不是全部。尤其是在加载本地图像时,您的照片源可能会在TTPhotoViewController注册为代理之前完成加载。因此,您需要检查添加到TTPhotoSource的代理,并向他们发送modelDidFinishLoad:消息,前提是您在添加代理时已完成加载
如果从TTModel继承,这说起来容易做起来难,因为无法向NSMutableArray注册以了解它何时更改
所以。。。将以下代码添加到TTPhotoViewController子类
// superDelegates KVO Mutator Methods
- (NSMutableArray*)delegates {
return [self mutableArrayValueForKey:@"superDelegates"];
}
- (void)insertObject:(id)object inSuperDelegatesAtIndex:(NSUInteger)index {
[super.delegates insertObject:object atIndex:index];
if ([self isLoaded]) {
if ([object respondsToSelector:@selector(modelDidFinishLoad:)]) {
[object performSelector:@selector(modelDidFinishLoad:) withObject:self];
}
}
}
- (void)removeObjectFromSuperDelegatesAtIndex:(NSUInteger)index {
[super.delegates removeObjectAtIndex:index];
}
- (NSArray*) superDelegates {
return super.delegates;
}
这将创建一个名为superDelegates的“虚拟”属性,它只是一个NSArray,而不是NSMutableArray。insertObject:InsuperDelegatesIndex:和RemoveObjectFromSuperDelegatesIndex:方法,因为它们的名称包括“superDelegates”属性的名称,所以允许键值编码函数(由于它是非正式协议,所以自动具有)mutableArrayValueForKey:合成符合NSMutableArray的代理对象,它允许通过将变异操作转换为对insertObject:InsuperDelegatesIndex:和RemoveObjectFromSuperDelegatesIndex:方法的调用来编辑superDelegates属性
然后,您所要做的就是重写“delegates”方法以返回这样一个生成的代理,然后poof,所有数组更改都会通过您运行,允许您在TTPhotoViewController自身连接时发送正确的加载通知。您很可能已覆盖视图,将在TTPhotoViewController
子类中出现方法,但忘记调用超级方法。任何其他具有明确解决方案的人都可以添加您的答案。看起来是个完美的方法。稍后我将尝试编写代码,看看它是否适合我的实现。