读书人

UITextView判断光标在第几行进入都有

发布时间: 2012-12-17 09:31:40 作者: rapoo

UITextView判断光标在第几行,进来都有分
如题,进来都有分
[最优解释]
额,这是ios5的方法,不能用于ios4, 看来你需要综合一下
[其他解释]
使用 uitextview 的selectedRange属性可以得到光标的位置

[其他解释]
重载UITextView吧!
[其他解释]
好凄凉,没人,帮楼主顶一下
[其他解释]
似乎不大好办,只能知道位置,怎么对应到行数,似乎得根据每行的字符数计算?
[其他解释]
先支持,题目在哪里呀?
[其他解释]
http://blog.csdn.net/liyanbo1984/article/details/5807095
没测试,仅供参考
[其他解释]
这个。。。。没用过,不知道。
[其他解释]
这个还真没做过...友情帮顶...
[其他解释]
看看这个行不行:
UITextRange *startTextRange = [textview characterRangeAtPoint:CGPointZero];
CGRect caretRect = [textview caretRectForPosition:startTextRange.end];
CGFloat topMargin = CGRectGetMinY(caretRect);
CGFloat lineHeight = CGRectGetHeight(caretRect);

caretRect = [textview caretRectForPosition:textview.selectedTextRange.end];
CGFloat caretTop = CGRectGetMinY(caretRect);
NSInteger lineIndex = (caretTop - topMargin) / lineHeight;
[其他解释]
使用 uitextview 的selectedRange属性可以得到光标的位置
[其他解释]

引用:
引用:

使用 uitextview 的selectedRange属性可以得到光标的位置

但并不能判断行数啊,如果能取得纵坐标也好。

1, 用selectedRange 获取光标位置,从而获得高度
2. 用sizeWithFont可以算出行高
3。 两者相除
[其他解释]
谢谢楼主 good!
[其他解释]
你看看可不可以获取每个字符的宽度,因为每个字符占的宽度是不一样的。不过你要判断这个干什么呢?说说你的目的。
[其他解释]
不会 帮你顶
[其他解释]
该回复于2012-07-08 08:54:55被版主删除
[其他解释]
引用:
好凄凉,没人,帮楼主顶一下

谢了谢了
[其他解释]
该回复于2012-07-09 08:21:30被版主删除
[其他解释]
该回复于2012-07-09 12:52:43被版主删除
[其他解释]
引用:
似乎不大好办,只能知道位置,怎么对应到行数,似乎得根据每行的字符数计算?

位置如何取得?有了位置就好办了
[其他解释]

- (int)getCursorPointY:(UITextView *)curtextView


{
CGPoint cursorPoint;
int Len = curtextView.selectedRange.location;
NSString *stringToCursor = [curtextView.text substringToIndex:Len];
NSArray *partStrArr = [stringToCursor componentsSeparatedByString:@"\n"];
int row = [partStrArr count];
CGSize fontsize = [@"我" sizeWithFont:[curtextView font]];
for (NSString *partStr in partStrArr)
{
CGSize partStrSize = [partStr sizeWithFont:[curtextView font] constrainedToSize:curtextView.contentSize lineBreakMode:UILineBreakModeCharacterWrap];
NSLog(@"partStrSize.width = %f,partStrSize.height = %f",partStrSize.width,partStrSize.height);
int rowG = partStrSize.height/fontsize.height;
if (rowG >1) {
rowG -=1;
row += rowG;
}

}

cursorPoint.y = (row -1)*fontsize.height;

return (int)(cursorPoint.y);
}


以上这段代码在4.3里可以准确定位,但是在5.1里每次定位都会产生误差,并且误差是累积的。
[其他解释]
引用:
看看这个行不行:
UITextRange *startTextRange = [textview characterRangeAtPoint:CGPointZero];
CGRect caretRect = [textview caretRectForPosition:startTextRange.end];
CGFloat topMargin = CGRectGetMin……

不行,运行时第一句就出错
[其他解释]
引用:
额,这是ios5的方法,不能用于ios4, 看来你需要综合一下

嗯,我试了,存在的问题和我之前发的方法一样,每当行数增加,都会出现一定的误差,最后会变成本来在第N行却提示在N-1行。
[其他解释]
该回复于2012-07-13 08:17:39被版主删除
[其他解释]
该回复于2012-07-13 08:19:33被版主删除
[其他解释]
引用:
使用 uitextview 的selectedRange属性可以得到光标的位置

但并不能判断行数啊,如果能取得纵坐标也好。
[其他解释]
该回复于2012-07-24 09:46:00被版主删除
[其他解释]
该回复于2012-07-24 09:23:29被版主删除
[其他解释]
该回复于2012-08-03 09:13:56被版主删除
[其他解释]

引用:
引用:

引用:

使用 uitextview 的selectedRange属性可以得到光标的位置

但并不能判断行数啊,如果能取得纵坐标也好。

1, 用selectedRange 获取光标位置,从而获得高度
2. 用sizeWithFont可以算出行高
3。 两者相除


用selectedRange如何得出高度啊?只能得出光标在字符中的位置,并不是坐标
[其他解释]
引用:
你看看可不可以获取每个字符的宽度,因为每个字符占的宽度是不一样的。不过你要判断这个干什么呢?说说你的目的。

比如说一个聊天软件,提供三行的UITextview,但是,当用户的光标到达第二行或第三行时,UITextview自动向上滚动
[其他解释]
引用:
它不是会自己滚动吗?

我想把光标维持在第二行,也就是到第二行就滚动。目前判断行数只需要获取到光标的纵坐标,关键就是如何获取
[其他解释]
它不是会自己滚动吗?
[其他解释]
该回复于2012-08-10 16:12:28被版主删除
[其他解释]
该回复于2012-08-11 09:38:04被版主删除
[其他解释]
该回复于2012-08-10 11:58:35被版主删除

读书人网 >Iphone

热点推荐