#ios #swift #uibutton
#iOS #swift #uibutton
Вопрос:
Есть ли какой-либо способ отправки строкового значения в UIButton
тег? Я знаю tag
, что это тип Int, но мне нужно отправить строковое значение.
let myButton: UIButton = {
let button = UIButton()
button.tag = "123"
return button
}()
Мне нужно отправить button.tag
в виде строки
Комментарии:
1.
accessibilityIdentifier
Вместо этого используйте свойство.2. Тип данных
tag
свойстваInt
(он определяетсяUIView
и наследуетсяUIButton
). Вы не можете изменить тип данных, следовательно, невозможно присвоить строку этому свойству. Если вы можете более подробно рассказать о том, чего вы хотите достичь, может быть шанс, что кто-нибудь сможет помочь вам с возможным решением вашей проблемы, но, как я уже сказал, короткий ответ на ваш вопрос — нет .3. accessibilityIndetifier помог мне, спасибо
Ответ №1:
Создайте пользовательский класс UIButton и создайте одно String
свойство типа, например customTag
class CustomButton: UIButton {
var customTag:String = ""
}
Назначьте пользовательский класс своему UIButton и используйте тег строкового типа, следуя следующему коду.
let myButton: CustomButton = {
let button = CustomButton()
button.customTag = "ABC"
return button
}()
Комментарии:
1. спасибо, но я использовал accessibilityLabel для строки в UIButton
2. Хорошо, это не проблема, но таким образом вы можете добавить одно или несколько пользовательских свойств (переменных) UIButton.
3. (неправильно) использование метки доступности — не очень хорошая идея. Это испортит VoiceOver для пользователей с ослабленным зрением (VoiceOver будет произносить текст, который вы вводите в ярлык доступности.)
4. Идентификатор доступности также не очень хорош, поскольку он используется для тестирования AppleUI. Если у вас нет никаких тестов AppleUI, это не повлияет на вас, но это может вызвать проблемы, если вы разработаете тесты пользовательского интерфейса позже.
Ответ №2:
Вместо тега вы можете сделать это с помощью accessibilityLabel
.
btn.accessibilityLabel = "ABC"
Комментарии:
1. Спасибо, это именно то, что я хотел.
Ответ №3:
Еще один ответ.
Вместо accessibilityLabel
/ accessibilityIdentifier
или любого другого, связанного с accessibility
, давайте перейдем к layer.name
Button.layer.name = "abc123"
@IBAction func wasPressed(_ sender: UIButton) {
print("was Pressed (sender.layer.name)")
}
Причина:
В случае, нам необходимо установить доступность для каждого экрана, в то время это может повлиять.
Но, если нам нужно добавить еще один слой UIButton
, это не повлияет
Ответ №4:
К сожалению, тег представляет собой всего лишь целочисленное значение. Что вы могли бы сделать, это:
- Создайте подкласс
UIButton
и добавьте свое собственное свойство - Используйте связанные объекты, как в https://gist.github.com/mjjimenez/7956352
- Используйте перечисления для тега; возможно, добавьте расширение для доступа к ним
- (Неправильно) используйте
accessibilityIdentifier
Ответ №5:
Просто создайте extension
из UIButton
или NSObject
.
extension NSObject {
private struct AssociatedKeys {
static var DescriptiveName = "strCustomTag"
}
var strCustomTag: String? {
get {
return objc_getAssociatedObject(self, amp;AssociatedKeys.DescriptiveName) as? String
}
set {
if let newValue = newValue {
objc_setAssociatedObject(
self,
amp;AssociatedKeys.DescriptiveName,
newValue as NSString?,
.OBJC_ASSOCIATION_RETAIN_NONATOMIC
)
}
}
}
}
Обратитесь к приведенному ниже коду, чтобы установить значение strCustomTag
let myButton: UIButton = {
let button = UIButton()
button.strCustomTag = "ABC"
return button
}()
Получить значение
print(view.strCustomTag)
Если вы создаете
extension
NSObject
strCustomTag
доступен из любого класса или любых элементов пользовательскогоUIButton
UITextField
интерфейса, таких как , и т.д.UIView
Нет необходимости изменять в exsting
storyboard
ИЛИXIB
file
Комментарии:
1. Спасибо accessibilityLabel мне помогло
Ответ №6:
Невозможно установить для тега значение String, поскольку его тип — Int .
Скорее всего, вам все равно не нужно будет его устанавливать, потому что использование тега UIView не является распространенным методом.
Если вы все еще хотите использовать подобное решение (я не рекомендую этого делать), вы можете использовать accessibilityIdentifier
свойство String .
Также вы можете создать пользовательский подкласс UIButton с пользовательским свойством String и использовать этот пользовательский подкласс вместо UIButton
Ответ №7:
Вы можете создать пользовательский класс для button, затем вы можете передавать любые значения, просто определив свойство в пользовательском классе.
Пример: я хочу передать String и Int оба значения в Button, поэтому я передам Int в тег button, а строка будет передана в пользовательском свойстве button.
class CustomButton: UIButton {
var stringToPass: String = ""
}
Класс ViewController
class HomeVC: UIViewController {
let customButton = CustomButton()
override func viewDidLoad() {
super.viewDidLoad()
customButton.stringToPass = "Your String"
}
}