Подтвердить что ты не робот

Swift и Xcode - Как создать пользовательские значки панели вкладок

У меня есть проект приложений с вкладками, над которыми я работаю в Xcode, написанном в Swift (Xcode 6.3 and Swift 1.2). У меня много проблем с пользовательскими значками панели вкладок. Я создал изображение в Photoshop (CS6), сохранил его как PNG, изменил его в Prepo как 30x30 и импортировал в Xcode в библиотеке активов. Затем я установил значок tab view controllers на это изображение. Однако он не отображается.

Я просмотрел эти страницы, но не нашел никакой помощи:
https://www.youtube.com/watch?v=4qqqoAWNfZA Пользовательские цвета значков на вкладке http://www.raywenderlich.com/forums/viewtopic.php?f=2&t=19333
http://www.appcoda.com/ios-programming-how-to-customize-tab-bar-background-appearance/ https://www.youtube.com/watch?v=4Tj_SeApUrs

Каков надлежащий процесс создания пользовательских значков на вкладке?

4b9b3361

Ответ 1

После небольшого исследования я решил проблему, поэтому подумал, что я опубликую здесь, если у кого-то еще будет аналогичная проблема. В Photoshop я сделал следующее:

  • Импортировал изображение, которое я хотел использовать в качестве значка панели вкладок (его проще, если вы используете черно-белое изображение, чтобы вам не пришлось удалять цвет).
  • Установите фон "Прозрачный", а не белый.
  • Удалено все белое изображение, чтобы оно было просто черным изображением с прозрачным фоном.
  • Сохранено изображение как .png.
  • Изменен размер изображения как квадрат с размерами 75x75 pixels (и назван [email protected]), 50x50 pixels (и назван [email protected]) и 25x25 pixels (и назван imageName.png)

В Xcode я сделал следующее:

  1. Перетащил изображения в Xcode и переименовал группу изображений как icoImageName.
  2. Выбрав вкладку, я хотел установить изображение в раскадровке в Xcode и установить "Изображение" (в разделе "Элемент" Бар "на панели" Инспектор ") до icoImageName. Обратите внимание, что я не установил" Selected Image "в" Элемент панели вкладок" (оставьте это поле пустым).

Готово.

Надеюсь, это поможет кому-то. Спасибо всем за помощь.

Ответ 2

Похоже, что у вас все правильно настроено в xCode. Проблема - это файл png, который вы используете.

Загрузите это изображение http://i.stack.imgur.com/zluev.png и узнайте, сохраняется ли проблема.

В соответствии с ответом на изображения UITabBarItem отображаются только как серый блок:

Стандартные значки на вкладках в iOS отображаются исключительно из альфа-канала. Цвета полностью игнорируются. Вместо цветов вы можете использовать разные значения альфа, которые приводят к другому оттенку серого (или синего, если выбрано)

Сделайте фон ваших значков прозрачным.

Ответ 3

Вы создали представление вкладки в построителе интерфейса? Если это так, поскольку вы добавили изображения в качестве актива, они должны отображаться в свойстве "Изображение" каждой кнопки вкладки под боковой панелью инспектора. Кроме того, я знаю, что вы уже опубликовали тонну учебных пособий, но это довольно актуально и подробно объясняет это: http://codewithchris.com/ios-tab-bar-app/

Ответ 4

введите описание изображения здесь

class ViewController: UIViewController {

    @IBOutlet var btnHome : UIButton!
    @IBOutlet var btnInvoice : UIButton!
    @IBOutlet var btnSettings : UIButton!
    @IBOutlet var btnMyOrder : UIButton!
    @IBOutlet var btnLogout : UIButton!

    @IBOutlet weak var viewContainer: UIView!

    var navController : UINavigationController!

    var selectedIndex : Int! = 0

    var arrTabColor  = [UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0),
                        UIColor(red: 29.0/255.0, green: 86.0/255.0, blue: 167.0/255.0, alpha: 1.0),
                        UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0),
                        UIColor(red: 29.0/255.0, green: 86.0/255.0, blue: 167.0/255.0, alpha: 1.0),
                        UIColor(red: 35.0/255.0, green: 93.0/255.0, blue: 175.0/255.0, alpha: 1.0)]

    var arrTabIdentiFierVC       = ["FirstVC","SecondVC","FirstVC","FirstVC","SecondVC"]


    // MARK: - Life Cycle

    override func viewDidLoad()
    {
        super.viewDidLoad()
        setTabbarImage(0)

        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    func setTabBarClicked(_ storyIdentifier : String,identifier : String)
    {
        let aStoryboard  = UIStoryboard.init(name: storyIdentifier, bundle: nil)
        let newViewController = aStoryboard.instantiateViewController(withIdentifier: identifier)

        navController = UINavigationController(rootViewController: newViewController)
        self.addChildViewController(navController)

        navController.view.frame = viewContainer.frame
        newViewController.view.frame = viewContainer.frame

        self.viewContainer.addSubview(navController.view)
        newViewController.didMove(toParentViewController: self)


    }

    func setTabbarImage(_ selectedIndex : Int!)
    {
        btnHome.backgroundColor = arrTabColor[0]
        btnInvoice.backgroundColor = arrTabColor[1]
        btnSettings.backgroundColor = arrTabColor[2]
        btnMyOrder.backgroundColor = arrTabColor[3]
        btnLogout.backgroundColor = arrTabColor[4]

        let selectedColor = UIColor(red: 40/255, green: 142/255, blue: 206.0/255, alpha: 1.0)

        if selectedIndex == 0
        {
            btnHome.backgroundColor = selectedColor

        }
        else if selectedIndex == 1
        {
            btnInvoice.backgroundColor = selectedColor

        }
        else if selectedIndex == 2
        {
            btnSettings.backgroundColor = selectedColor

        }
        else if selectedIndex == 3
        {
            btnMyOrder.backgroundColor = selectedColor
        }
        else if selectedIndex == 4
        {
            btnLogout.backgroundColor = selectedColor

        }
    }

    // MARK: - Action Method
    @IBAction func HomeClicked(_ sender : AnyObject?)
    {

        setTabbarImage(0)

        setTabBarClicked("Main",identifier: arrTabIdentiFierVC[0])

    }
    @IBAction func InvoiceClicked(_ sender : AnyObject?)
    {
        setTabbarImage(1)

        setTabBarClicked("Main",identifier: arrTabIdentiFierVC[1])

    }
    @IBAction func SettingClicked(_ sender : AnyObject?)
    {
        setTabbarImage(2)
        setTabBarClicked("Main",identifier: arrTabIdentiFierVC[2])


    }
    @IBAction func MyorderClicked(_ sender : AnyObject?)
    {
        setTabbarImage(3)
        setTabBarClicked("Main",identifier: arrTabIdentiFierVC[3])

    }
    @IBAction func logoutClicked(_ sender : AnyObject?)
    {
        setTabbarImage(4)


        let alert = UIAlertController(title: "", message: "Are you sure want to logout?", preferredStyle: UIAlertControllerStyle.alert)

        let CancelAction = UIAlertAction(title: "NO", style: .default) { (action:UIAlertAction!) in

        }
        alert.addAction(CancelAction)

        let OKAction = UIAlertAction(title: "YES", style: .default) { (action:UIAlertAction!) in

          //  var isNav : Bool! = false

            //for objChild in (self.parent?.childViewControllers)!
           // {
//                if objChild.isKind(of: LoginVC.self)
//                {
//                    self.navigationController!.popToViewController(objChild, animated: true)
//                    CommonMethods.removeCustomObject(Constants.kUserProfile)
//                    
//                    isNav = true
//                    break
//                    
//                }
           // }
           // if !isNav
           // {
//                CommonMethods.removeCustomObject(Constants.kUserProfile)
//                let aNavController = (AppDelegate.getDelegate().window!.rootViewController! as! UINavigationController)
//                let storyboard = UIStoryboard(name: "Main", bundle: nil)
//                var aVCObj = UIViewController()
//                aVCObj = storyboard.instantiateViewController(withIdentifier: "LoginVC")
//                var aMutArr = aNavController.viewControllers
//                aMutArr.insert(aVCObj, at: 0)
//                aNavController.viewControllers = aMutArr
//                aNavController.popToRootViewController(animated: true)
          //  }
        }
        alert.addAction(OKAction)
        self.present(alert, animated: true, completion: nil)
    }

    // MARK: - Action Method


}