InitWithCoder多次调用

时间:2013-07-22 12:59:08

标签: iphone ios uitabbaritem

我定义了一个自定义的initWithCoder方法,因为我正在尝试制作自定义工具栏项。我的故事板中有5个视图控制器,每个控制器都有一个自定义类。它们都是初始视图控制器类的子类。主要问题是,它不是只更改一个类标签栏项的图像,而是更改按下的每个标签栏项的图像。此外,当取消选择标签栏项时,图像不会更改为未选择的标签栏项目图像。每个子类视图控制器都接收相同的init方法。我的主要问题是如何使每个类,无论是子类还是父类,都接收不同的init方法?

 -(id)initWithCoder:(NSCoder *)aDecoder

{
        NSLog(@"First");
        if (self = [super initWithCoder:aDecoder]) 

    {
            NSLog(@"Second");
            [[self tabBarItem] setFinishedSelectedImage:[UIImage imageNamed:@"RedStar2.png"] 
            withFinishedUnselectedImage:[UIImage imageNamed:@"Star3.png"]];
            //instead of just changing the image of the class's tab bar item, it changes the image of all
            classes tab bar items
            [[self tabBarItem] setTitleTextAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIColor
            redColor], UITextAttributeTextColor, nil] forState:UIControlStateNormal];
      }
        return self;
} 

运行应用程序时,关键字“first”和“second”都被调用了5次。每个视图控制器都有一个自定义类。

1 个答案:

答案 0 :(得分:0)

如果你想为每个标签创建一个不同的图像,你必须在每个子类中复制这个方法5次,而不是在“共同的祖先” - 超类中做同样的工作。