Как я могу сделать свой Uipickerview многострочным в swift?
у меня есть UIPickerView как я могу сделать его многострочным? У меня длинное сообщение.
вот мой код.
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? {
var returnResult: String = ""
if pickerView.tag == 1 {
//This picker has long text
let position: UInt = UInt(row)
returnResult = list.objectAtIndex(position).Description.Value;
} else if pickerView.tag == 2 {
returnResult = questionTwoOptions[row]
} else if pickerView.tag == 3 {
returnResult = questionThreeOptions[row]
} else {
returnResult = ""
}
print(returnResult)
return returnResult
}
вот мой viewForRow methode
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
let label = UILabel(frame: CGRectMake(0, 0, 400, 44));
label.lineBreakMode = .ByWordWrapping;
label.numberOfLines = 0;
//view!.addSubview(label)
return label;
}
3 ответов
вы можете попробовать это с помощью пользовательского представления
func pickerView(pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusingView view: UIView?) -> UIView {
let label = UILabel(frame: CGRectMake(0, 0, 400, 44));
label.lineBreakMode = .ByWordWrapping;
label.numberOfLines = 0;
label.text = arr[row]
label.sizeToFit()
return label;
}
Если у вас есть контент, который может занимать более двух строк, вы также можете установить высоту строки
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 80
}
вам придется изменить rowHeightForComponent (UIPickerView)
что-то типа:
func pickerView(pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat
{
return 70.0
}
и вы сможете увидеть его в многострочном, все остальное вы сделали хорошо.
Swift 4
- имейте в виду
UILabel
is подклассUIView
. - мы создаем представления для
UIPickerView
, другие методы делегирования, которые предоставляют текст для представлений, теперь не имеют значения. - изменить
height:
параметр во время созданияUILabel
и настройкаreturn 80.0
для высоты строки, если требуется еще больше места. - не забудьте установить дополнительные свойства, такие как текст выравнивание.
добавить метод делегата, чтобы указать высоту строки. Настройте значение, которое лучше всего подходит для ваших целей отображения.
func pickerView(_ pickerView: UIPickerView, rowHeightForComponent component: Int) -> CGFloat {
return 80.0
}
затем добавьте метод делегата для предоставления представления.
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let label: UILabel
if let view = view {
label = view as! UILabel
}
else {
label = UILabel(frame: CGRect(x: 0, y: 0, width: pickerView.frame.width, height: 400))
}
label.text = myTitleStrings[row]
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.sizeToFit()
return label
}
пример с приписываемым текстом
func pickerView(_ pickerView: UIPickerView, viewForRow row: Int, forComponent component: Int, reusing view: UIView?) -> UIView {
let label: UILabel
if let view = view {
label = view as! UILabel
}
else {
label = UILabel(frame: CGRect(x: 0, y: 0, width: pickerView.frame.width, height: 400))
}
let title = myTitleStrings[row]
let attributes = [NSAttributedStringKey.foregroundColor: UIColor.white,
NSAttributedStringKey.font: UIFont(name: "HelveticaNeue", size: 18.0)!]
label.attributedText = NSAttributedString(string: title, attributes: attributes)
label.lineBreakMode = .byWordWrapping
label.numberOfLines = 0
label.sizeToFit()
return label
}