我正在尝试在示例iPad应用程序中实现TTPhotoViewController
。我已经正确实施了TTPhotoSource
和TTPhoto
协议。 TTPhotoViewController
会显示图片,但直到刷过。
下面标签栏中的左右按钮似乎根本不起作用,它们从不更改显示的图像。永远不会放置UIActivityIndicatorView
,也不会在到达最后或第一张图像时验证左右按钮。
我正在初始化TTPhotoViewController
的子类作为UINavigationController
对象的rootViewController,我将它添加到视图中。
这排除了此处遇到问题的可能性: http://three20.stackexchange.com/questions/78/ttphotoviewcontroller-not-loading-images-immediately
我还缺少什么?任何人都面临类似的问题并找到了解决方法吗?
谢谢, 拉吉
答案 0 :(得分:3)
您很可能会覆盖viewWillAppear
子类中的TTPhotoViewController
方法,但忘记调用超级方法。
答案 1 :(得分:1)
有同样的问题。 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:inSuperDelegatesAtIndex:和removeObjectFromSuperDelegatesAtIndex:方法,因为它们的名称包含“superDelegates”属性的名称,允许键值编码功能(由于它是非正式协议而自动拥有)mutableArrayValueForKey:合成符合的代理对象NSMutableArray,它允许通过将变异操作转换为对insertObject的调用来编辑superDelegates属性:inSuperDelegatesAtIndex:和removeObjectFromSuperDelegatesAtIndex:methods。
然后,您所要做的就是覆盖“delegates”方法以返回这样生成的代理,并且poof,所有数组更改都会通过您运行,允许您在TTPhotoViewController附加自身时发送正确的加载通知。 / p>
答案 2 :(得分:0)
经过一些调试后,我发现了问题,这只是一个快速修复:
在Three20UI项目的TTModelViewController类中,找到方法
-refresh
并评论if条件:
if (_isViewAppearing)
最终将调用-updateView
方法,该方法之前未被调用。
这是一个快速修复,必须稍后调查bool:_isViewAppearing
。