Как мне использовать оператор switch, чтобы узнать, нажата ли кнопка UIB? - PullRequest
3 голосов
/ 19 ноября 2011

Я делаю приложение ios и у меня возникают проблемы с использованием оператора switch, чтобы проверить, был ли нажат элемент UIButton.Вот кому я хочу, чтобы конечный продукт работал: у меня есть несколько неокрашенных изображений (под неокрашенным я имею в виду белый, UIImage).При касании неокрашенного изображения открывается подпредставление с цветными полями (UIB-кнопки, 24 из них, каждый с отдельными цветами.).Когда выбрана кнопка с цветным квадратом и нажата кнопка «Назад» на панели инструментов, подпредставление закрывается и вновь отображается исходный вид с неокрашенным изображением (выбранное для открытия подпредставления), теперь окрашенным в нужный цвет, выбранный в подпредставлении..

Я хочу использовать оператор switch, чтобы найти какое неокрашенное изображение и какой цвет был выбран (все элементы UIButton).Я не знаю, что поместить в качестве выражения в операторе switch, потому что я имею дело с UIButtons.Оставшаяся часть оператора switch сравнивает значение элемента UIButton, чтобы определить, равно ли оно значению YES (при нажатии кнопки), и, если оно есть, возвращает строку.Я также хочу знать, как подключить IBAction к UIImage (поэтому при нажатии на изображения открывается подпредставление).

Ответы [ 2 ]

5 голосов
/ 19 ноября 2011

Я немного увлечен разработкой для iOS, но вы, вероятно, могли бы сделать следующее:

Установите кнопки для одного и того же обработчика событий и используйте атрибут sender, чтобы перейти к элементу тега кнопки, который вы можете указать для каждой кнопки.

- (IBAction) doStuff:(id) sender {
UIButton *button = (UIButton*) sender;
switch(button.tag)
{
   //do stuff
}

Если это не сработает, вы можете использовать любые свойства кнопок, которые вы считаете нужными, чтобы различать их, такие как заголовок, цвет заголовка и т. Д.

Для получения лучших практик я бы посоветовал вам также проверить, является ли отправитель типа UIButton, прежде чем пытаться преобразовать его в объект.

1 голос
/ 29 ноября 2016

Для Swift 3.0 нам больше не нужно наблюдать за тегами.Просто сохраните ссылку на ваши кнопки (IBOutlet или некоторую приватную переменную) и включите саму кнопку, используя Identifier Pattern.

import UIKit

class Foo {
    // Create three UIButton instances - can be IBOutlet too
    let buttonOne = UIButton()
    let buttonTwo = UIButton()
    let buttonThree = UIButton()

    init() {
        // Assign the same selector to all of the buttons - Same as setting the same IBAction for the same buttons
        [buttonOne, buttonTwo, buttonThree].forEach{(
            $0.addTarget(self, action: Selector(("buttonTapped")), for: .touchUpInside)    
        )}
    }

    func buttonTapped(sender: UIButton) {
        // Lets just use the Identifier Pattern for finding the right tapped button
        switch sender {
        case buttonOne:
            print("button one was tapped")
        case buttonTwo:
            print("button two was tapped")
        case buttonThree:
            print("button three was tapped")
        default:
            print("unkown button was tapped")
            break;
        }
    }
}

// Example
let foo = Foo()
foo.buttonTapped(sender: foo.buttonOne)
...