Мне нравится знать, есть ли способ использовать closure
в функции updateView()
, чтобы код был not repeated
для phone
и pad
в коде ниже. Здесь закрытие должно иметь parameters
для width
и height
@IBInspectable var leftImage: UIImage? {
didSet {
updateView()
}
}
func updateView() {
if let image = leftImage
{
leftViewMode = UITextField.ViewMode.always
if (UIDevice.current.userInterfaceIdiom == .phone)
{
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
imageView.contentMode = .scaleAspectFit
imageView.image = image
imageView.tintColor = color
leftView = imageView
}
if (UIDevice.current.userInterfaceIdiom == .pad)
{
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
imageView.contentMode = .scaleAspectFit
imageView.image = image
imageView.tintColor = color
leftView = imageView
}
}
else
{
leftViewMode = UITextField.ViewMode.never
leftView = nil
}
}
У меня кончились идеи, безуспешно пробовал. Заранее спасибо.
вы меняете только кадр в соответствии с типом устройства, я бы предпочел использовать локальный общий var для кадра и изменить его в соответствии с устройством!
@ShivamGaur, это хорошая идея :)
Код идентичен, за исключением размера представления изображения. Установите переменную для размера в зависимости от устройства и не повторяйте какой-либо другой код.
func updateView() {
if let image = leftImage {
leftViewMode = UITextField.ViewMode.always
let size: CGFloat = UIDevice.current.userInterfaceIdiom == .phone ? 20 : 30
let imageView = UIImageView(frame: CGRect(x: 0, y: 0, width: size, height: size))
imageView.contentMode = .scaleAspectFit
imageView.image = image
imageView.tintColor = color
leftView = imageView
} else {
leftViewMode = UITextField.ViewMode.never
leftView = nil
}
}
Кстати, не пишите код, который принимает решения на основе идиомы устройства. Принимайте решения на основе размера представления контроллера представления.
Никогда даже не думал об этом решении. Думал слишком глубоко.
@rmaddy, будет помнить о том, что нельзя принимать решения на основе идиомы устройства. Спасибо :)
зачем здесь замыкание? Я думаю, вы можете просто назначить
width
иheight
в условии if else и переместить значения настройки создания изображения в сторону.