覆盖自定义UITableView类方法

时间:2015-12-10 07:56:29

标签: ios objective-c uitableview delegates uiimage

我正在使用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表单的标题是我当前的视图控制器,而不是硬编码值?

由于

1 个答案:

答案 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"];

子类中添加了两件事:

  1. 我们添加了一个存储的属性customTitle,因此每当调用updateNavigation时,我们仍然记得我们想要显示的内容。我还决定在这里打电话给[self updateNavigation] - 这可能不需要,但可以在显示浏览器时更改标题。
  2. 我们覆盖updateNavigation - 这是所有这一切的线索。使用CustomTitlePhotoBrowser时,只要原始代码调用updateNavigation,我们就会调用我们的覆盖实现。