滚动选择器视图w /零数据(零行)时,我收到断言失败.在滚动选择器视图时,我遇到了这个崩溃.在iOS 6上测试
*断言失败 - [UITableViewRowData rectForRow:inSection:],/ SourceCache/UIKit_Sim/UIKit-2372/UITableViewRowData.m:1630
*由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'请求无效索引路径处的rect(2个索引[0,0])'
任何帮助都很明显.
我想降低UIPickerView我的iPhone应用程序中的高度,以便它只显示一行和一列.拾取器视图的高度应等于行的高度.
我正在使用Interface Builder来构建UIPickerView,但我找不到一种简单的方法来重新调整此控件的大小.
你怎么收缩UIPickerView?
我有UIPickerView3个组件填充2 NSMutableArrays(2个组件具有相同的阵列).
一个教程说:
//PickerViewController.m
- (void)pickerView:(UIPickerView *)thePickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component {
NSLog(@"Selected Color: %@. Index of selected color: %i", [arrayColors objectAtIndex:row], row);
}
Run Code Online (Sandbox Code Playgroud)
但我希望UIAlertView 在用户触摸UIButton后显示每个组件的选定行.
有没有办法做到这一点?或者我必须使用3隐形UILabels作为缓冲区?
提前致谢.
我已经对这个问题进行了很多研究,但是我还不清楚它是否可能.基本上我想要做的是创建一个UIPickerView连续的,你可以永久地旋转它,你将永远不会到达它的末尾(因为最后一个值后跟第一个值).
我在网上看了一下,似乎有各种各样的黑客可以达到预期的效果.然而,许多这些解决方案似乎增加了行中的行数UIPickerView以欺骗用户认为UIPickerView是连续的(然而,实际上如果他们继续滚动它们最终会到达终点).
我所追求的是一种创建UIPickerView的方法,如果你继续滚动数天,数周,数月或数年,你将永远无法达到目的.如果解决方案是黑客攻击,我不介意太多,因为我知道Apple还没有提供实现这种效果的方法.
请有人建议这样做(或者至少指出我正确的方向)?
有没有办法让UIPickerView只读?这意味着用户无法翻阅选项.
PS.这与在didSelectRow方法中不传递任何内容不同,因为我只希望用户看到选择器在那里而不是触摸它.
我正在尝试创建一个文本框,当它被选中时,UIPickerView会打开,并提供可供选择的选项.选择后,UIPickerView将隐藏,所选项目将显示在文本框中.我尝试了在网上找到的不同代码,但我无法让它工作.如果有人可以为我建议一个完整的代码,或者告诉我在我的代码中我做错了什么,这将是非常棒的.非常感谢.
这是我的代码:
@IBOutlet var textfieldBizCat: UITextField!
@IBOutlet var pickerBizCat: UIPickerView! = UIPickerView()
var bizCat = ["Cat One", "Cat Two", "Cat Three"]
override func viewDidLoad() {
super.viewDidLoad()
var bizCatCount = bizCat.count
self.textfieldBizCat.inputView = pickerView
}
// returns the number of 'columns' to display.
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int{
return 1
}
// returns the # of rows in each component..
func pickerView(pickerView: UIPickerView!, numberOfRowsInComponent component: Int) -> Int{
return bizCat.count
}
func pickerView(pickerView: UIPickerView!, titleForRow row: Int, forComponent component: Int) -> …Run Code Online (Sandbox Code Playgroud) 我已经看过两个与我相似的问题,但这些问题的答案对我不起作用.我有一个旧项目,其中包含在一组方括号内手动输入的国家/地区列表.
我可以在我的pickerView中轻松使用它,但我想知道是否有更有效的方法来做到这一点?
我将使用UIPickerView中的国家/地区列表.
我UIPickerView和我UIView在一起UITextField.我让用户从选择器中选择一个值或在文本字段中输入自定义值.
当用户从选择器中选择任何选项时,变量值将在(pickerView:didSelectRow:inComponent:方法中)改变.但是如果用户没有在选择器上选择任何值(因为他们想要选择已经选择的第一个选项),则不会调用此方法,并且选择不会反映在变量中.
我尝试将变量的默认值设置为选择器中的第一个选项.但在这种情况下,当用户编辑文本字段时,变量将具有文本字段的文本.现在,如果用户决定再次选择第一个值,则新值不会反映在变量中.
我怎么能克服这个?谢谢.
这是相关的代码
在我的viewDidLoad我有这个语句selectText默认情况下设置选择器的第一个选项
[self setSelectText:[myArray objectAtIndex:0]];
Run Code Online (Sandbox Code Playgroud)
textFieldShouldReturn
- (BOOL)textFieldShouldReturn:(UITextField *)txtField{
[txtField resignFirstResponder];
[self setSelectText:txtField.text];
return YES;
}
Run Code Online (Sandbox Code Playgroud)
PickerViewDelegate的didSelectRow
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component
{
// report the selection to the UI label
[self setSelectText:[myArray objectAtIndex:[pickerView selectedRowInComponent:0]]];
}
Run Code Online (Sandbox Code Playgroud)
当用户编辑文本然后决定他想要使用选择器的第一个值时,就会出现问题.在这种情况下,他们将关闭键盘并单击选择器的第一个选项(已选中).此操作不会调用didSelectRow,因此selectText的值不会更改.
为了使用户能够更改其值selectText,他们首先必须从选择器中选择一些其他值,然后选择第一行.
这是我到目前为止所做的截图:

所以我要做的就是当你选择"选择一个名字"Textfield我需要一个Picker来显示,输入@"Jack".
一个简短的问题:在注册过程中,我想要求用户从值列表中选择一个值.
这是使用视图控制器添加所有文本字段和值的选择器视图的正确方法吗?由于选择器视图在文本字段区域之间需要这么大的空间,我想知道在这种情况下最佳实践是什么?
到目前为止这是我的代码:
class RegisterViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource{
@IBOutlet weak var gradeTextField: UITextField!
@IBOutlet weak var gradePicker: UIPickerView!
let gradePickerValues = ["5. Klasse", "6. Klasse", "7. Klasse"]
func numberOfComponentsInPickerView(pickerView: UIPickerView!) -> Int{
return 1
}
func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int{
return gradePickerValues.count
}
func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String! {
return gradePickerValues[row]
}
func pickerView(pickerView: UIPickerView!, didSelectRow row: Int, inComponent component: Int){
gradeTextField.text = gradePickerValues[row]
self.view.endEditing(true)
}
override func viewDidLoad() {
super.viewDidLoad() …Run Code Online (Sandbox Code Playgroud) uipickerview ×10
ios ×6
iphone ×3
swift ×3
cocoa-touch ×2
objective-c ×2
uitextfield ×2
crash ×1
ios6 ×1
nsarray ×1
nslocale ×1
picker ×1