Как изменить изображение значка UITabBar?

#iphone #objective-c #xcode #xcode4 #uitabbarcontroller

#iPhone #objective-c #xcode #xcode4 #uitabbarcontroller

Вопрос:

Я работаю над приложением и хочу настроить изображение значка UITabBar.

У меня есть изображение с именем about.png это изображение я хочу установить в качестве левого изображения значка UITabBar моего приложения. как я могу это сделать?

Ответ №1:

если вы используете этот код и используете свои собственные изображения, а не встроенные, вы используете свои изображения…

 - (id)init {
UIImage* anImage = [UIImage imageNamed:@"newspaper.png"];
UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"News" image:anImage tag:0];
self.tabBarItem = theItem;
[theItem release];
return self;  }
  

newspaper.png — это мое собственное изображение на панели вкладок…

отлично, теперь этого будет достаточно для решения вашей проблемы…

Комментарии:

1. могу ли я использовать этот код в файле реализации делегирования. генерируется ошибка о TabBarItem

Ответ №2:

Внедрите init() в ViewController, в котором вы используете tab.

 - (id)init {

if (self = [super initWithNibName:@"Search" bundle:nil]) {
    UIImage* tabImage = [UIImage imageNamed:@"search.png"];
    UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"Search" image:tabImage tag:0];
    self.tabBarItem = theItem;
    [theItem release];
}
return self;
}  
  

Ответ №3:

Если вы хотите изменить изображение для UITabBarItem, вы можете использовать его метод экземпляра

 - (id)initWithTitle:(NSString  *)title image:(UIImage  *)image tag:(NSInteger)tag
  

Ответ №4:

Всегда есть два способа сделать это программно или визуально (с использованием IB)

Программно:-

 UITabBarItem* theItem = [[UITabBarItem alloc] initWithTitle:@"News" image:anImage tag:0];
  

используйте это или, если вы делаете визуально:-
Нажмите на значок конкретной вкладки в IB и выберите настроить и значок и укажите имя конкретного файла значка.

Возможно, это решит вашу проблему…

Комментарии:

1. я не говорю, что вы использовали встроенные изображения Xcode, просто посмотрите на мой новый ответ, опубликованный в ur list…

Ответ №5:

Вы можете изменить это следующим образом. в методе делегирования контроллера панели вкладок

 - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController

{
    if([tabBarController selectedIndex] == 0)
    {
        [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
    }    
}
  

с помощью этого вы можете изменить свое изображение tabbaritem.

Или вы можете использовать непосредственно в своих контроллерах просмотра метод init (или viewWillAppear), например

         [viewController.tabBarItem setFinishedSelectedImage:[UIImage imageNamed:@"selected.png"]withFinishedUnselectedImage:[UIImage imageNamed:@"unselect.png"]];
  

Ответ №6:

Сначала вы создаете класс этого кода :

 extension UITabBarController {

    func addIcon(icon : UIImage, deselectIcon : UIImage, buttonIndex : Int, currentPage : Int){

        var index = 0
        for view in view.subviews {

            if view.subviews.count > 3 {

                for _view in view.subviews {

                    if index == buttonIndex {

                        for v in _view.subviews {

                            if v is UIImageView {
                                v.removeFromSuperview()
                            }
                        }

                        let img = UIImageView(frame: CGRect(x: _view.frame.width / 2 - 15, y: 4, width: 30, height: 30))

                        if buttonIndex == currentPage {
                            img.image = icon
                        }else{
                            img.image = deselectIcon
                        }
                        img.contentMode = .scaleAspectFit

                        _view.addSubview(img)


                    }
                    index  = 1
                }

            }
        }

    }
}
  

В didload вы вызываете функцию :

 override func viewDidLoad() {
    super.viewDidLoad()



    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()   0.1 ) {
        self.tabBarController?.addIcon(icon: #imageLiteral(resourceName: "Shop"), deselectIcon: #imageLiteral(resourceName: "Shop"), buttonIndex: 1, currentPage: 1)
    }
}

override func viewWillAppear(_ animated: Bool) {

    tabBarController?.addIcon(icon: #imageLiteral(resourceName: "Shop"), deselectIcon: #imageLiteral(resourceName: "Shop"), buttonIndex: 1, currentPage: 1)

}