如何将UITextView
中的文字移至个人UITextFields
。例如,如果我在textview中有5行文本,我希望将其移动到为每行分配的5个UITextField。我现在能够使用信息填充UITableView
,但如果将其移动到TextFields,我将需要做的更容易。
答案 0 :(得分:2)
尝试类似:
NSArray *subStrings = [myTextView.text componentsSeparatedByString: @"\n"];
textField1.text=subStrings[0];
textField2.text=subStrings[1];
如果你的textView没有任何\ n字符,那么你需要做更多的工作来获取基于行的textview文本。
试试这个:
- (void)viewDidLoad {
[super viewDidLoad];
//set the textView in storyboard or you can do it here:
textView.text=@"Lorem ipsum dolor sit er elit lamet, consectetaur cillium adipisicing pecu, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Nam liber te conscient to factor tum poen legum odioque civiuda.";
//Initialise your array
yourArray=[[NSMutableArray alloc]init];
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLayoutManager *layoutManager = [textView layoutManager];
unsigned numberOfLines, index, numberOfGlyphs =
[layoutManager numberOfGlyphs];
NSRange lineRange;
for (numberOfLines = 0, index = 0; index < numberOfGlyphs; numberOfLines++){
(void) [layoutManager lineFragmentRectForGlyphAtIndex:index
effectiveRange:&lineRange];
index = NSMaxRange(lineRange);
NSString *lineText= [textView.text substringWithRange:lineRange];
[yourArray addObject:lineText];
}
textField1.text=yourArray[0];
textField2.text=yourArray[1];
}
此代码假定您引用了配置了布局管理器,文本存储和文本容器的textView
。 textView
返回对布局管理器的引用,然后返回其相关文本存储中所有字符的字形的数量,执行字形生成如有必要。然后for循环开始布置文本并计算得到的线段。 NSLayoutManager
方法lineFragmentRectForGlyphAtIndex:effectiveRange:
强制在传递给它的索引处包含字形的行的布局。
该方法返回行片段(此处忽略)占用的矩形,并通过引用返回布局后行中字形的范围。在该方法计算一行之后,NSMaxRangefunction
返回的索引大于该范围中的最大值,即下一行中第一个字形的索引。 numberOfLines
变量递增,for循环重复,直到index大于文本中的字形数,此时numberOfLines
包含布局过程产生的行数,由自动换行。
了解更多info.
然后你可以做
textField1.text=yourArray[0];
textField2.text=yourArray[1];
对于第一次迭代,字符串lineText将具有textview的第一行,而对于第二次迭代,它将具有textView的第二行。