Как убрать фоновое изображение на кнопку - PullRequest
5 голосов
/ 19 июня 2011

Я добавил 10 кнопок в представление (например, название представления "menuView"), теперь я хочу удалить фоновое изображение для 2-й, 3-й, 4-й кнопок. Я написал такой код

for(id btn in [menuView subViews]){

       [btn setBackgroundImage:nil forState:UIControlStateNormal];

 }

Проблема с этим кодом в том, что он удаляет все 10 кнопок backGroundimage, но мне нужно установить nil для 2-й, 3-й и 4-й кнопок

Ответы [ 5 ]

11 голосов
/ 19 июня 2011

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

for(UIButton *btn in [menuView subViews]){
    if (btn.tag == 2 || btn.tag == 3 || btn.tag == 4) {
       [btn setBackgroundImage:nil forState:UIControlStateNormal];
    }
 }

Конечно, вам нужно убедиться, что в menuView нет других представлений, которые могли бы использовать тот же тег. Поэтому выбор состоит в том, чтобы сделать теги большими, уникальными значениями или проверить, что они на самом деле являются кнопками UIB. Я отредактировал это, предполагая, что единственными подпредставлениями menuView являются кнопки UIB. Перечисление по UIButton не вызовет предупреждений компилятора о том, что tag не является свойством NSObject.

UIButton - это подкласс UIControl, который является подклассом UIView. UIView имеет свойство tag, поэтому UIButton наследует это свойство. Полезно просмотреть документы для класса, который вы используете, и продолжить иерархию, чтобы увидеть, есть ли свойства или методы, которые полезны для того, что вам нужно сделать.

2 голосов
/ 19 июня 2011

Просто чтобы расширить мой комментарий.

Используя IBOutletCollection, вы можете указать массив для многих объектов в кончике.Вы объявляете это так (синтезируя в реализации):

@property (nonatomic, retain) IBOutletCollection(UIButton) NSArray *threeButtons;

Это говорит IB, что это коллекция элементов UIButton.В IB вы соединяете это с тремя кнопками, для которых вы хотите удалить фоновое изображение, управляя перетаскиванием из него на кнопки.Как только это будет сделано, массив будет содержать те кнопки, которые вы подключили, и вы можете выполнить цикл следующим образом:

for (UIButton *button in self.threeButtons) {
    [button setBackgroundImage:nil forState:UIControlStateNormal];
}

Опять же, ссылку на более подробное объяснение можно найти по адресу: http://bobmccune.com/2011/01/31/using-ios-4s-iboutletcollection

1 голос
/ 19 июня 2011

Вы можете назначить теги кнопкам от 1 до 10 при добавлении их в представление меню.А теперь с помощью тегов мы можем решить, что делать с кнопками.

1 голос
/ 19 июня 2011

При создании кнопок попробуйте использовать свойство «tag».Затем, когда вы устанавливаете фон в ноль, вы можете проверить btn.tag == 2, btn.tag == 3 или btn.tag == 4.

0 голосов
/ 20 июня 2011

Во-первых, вы размещаете кнопки с помощью Interface Builder?

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

 for(UIButton *buttonname in [yourView subViews]){
        if (buttonname.tag == 2 || buttonname.tag == 3 || buttonname.tag == 4) {
            [buttonname setBackgroundImage:nil forState:UIControlStateNormal];
        }
    }

Если вы создаете их программно и последовательно, я бы рекомендовал размещать кнопки в массиве по мере их создания и просто удалять фон кнопок, используя «objectAtIndex».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...