我正在使用MWPhotoBrowser在应用中显示一些照片,我想举例来更改导航控制器的标题。使用我在当前视图控制器中的值。从当前视图控制器我模拟调用MWPhotoBrowser像这样
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];
//Tried this below didn't work
browser.title = @"MY NEW TITLE";
UINavigationController *nc = [[UINavigationController alloc] initWithRootViewController:browser];
nc.modalTransitionStyle = UIModalTransitionStyleCrossDissolve;
[self presentViewController:nc animated:YES completion:nil];
所以我进入了这个类的实际文件,在MWPhotoBrowser.m
中有一个像这样的函数
- (void)updateNavigation {
NSUInteger numberOfPhotos = [self numberOfPhotos];
self.title = [NSString stringWithFormat:@"%lu Photots", photosText];
}
我可以手动更改它(硬编码值),但我希望值根据我的原始视图控制器进行更改,所以我想传递一个值,以便能够在原始视图控制器上设置它。所以我尝试了这样的事情,在updateNavigation
下面放
-(void)updateTitle:(NSString*)title {
self.title = title;
}
然后在我的原始视图控制器中我尝试了
MWPhotoBrowser *browser = [[MWPhotoBrowser alloc] initWithDelegate:self];
[browser updateTitle:@"TEST TITLE"];
但是这也没有用,所以如何设置MWPhotoBrowser
表单的标题是我当前的视图控制器,而不是硬编码值?
由于
答案 0 :(得分:0)
updateNavigation
方法后,可以在任何地方调用 updateTitle:
,这就是为什么它不起作用。此外,更改/添加外部库的内容是一个坏主意,因为当您更新它们时,您必须记住再次应用所有更改。
现在实现你想要的最简单的方法是创建一个简单的MWPhotoBrowser
子类,如下所示:
CustomTitlePhotoBrowser.h
#import <MWPhotoBrowser/MWPhotoBrowser.h> //I'm not sure if this is a correct import, change accordingly
@interface CustomTitlePhotoBrowser : MWPhotoBrowser
-(void)updateTitle:(NSString *)title;
@end
CustomTitlePhotoBrowser.m
#import "CustomBrowser.h"
@interface CustomTitlePhotoBrowser()
@property(nonatomic, copy) NSString *customTitle;
@end
@implementation CustomTitlePhotoBrowser
-(void)updateTitle:(NSString *)title {
self.customTitle = title;
[self updateNavigation];
}
-(void)updateNavigation {
self.title = self.customTitle;
}
@end
使用它:
CustomTitlePhotoBrowser *browser = [[CustomTitlePhotoBrowser alloc] initWithDelegate:self];
[browser updateTitle:@"TEST TITLE"];
子类中添加了两件事:
customTitle
,因此每当调用updateNavigation
时,我们仍然记得我们想要显示的内容。我还决定在这里打电话给[self updateNavigation]
- 这可能不需要,但可以在显示浏览器时更改标题。updateNavigation
- 这是所有这一切的线索。使用CustomTitlePhotoBrowser
时,只要原始代码调用updateNavigation
,我们就会调用我们的覆盖实现。