iPhone自带的备忘录软件有着不错的用户界面,那它的文本线是怎么实现的呢?不知道.知道的大神请留下解决方案.
不过几个几天的摸索,总算是想出了一条解决方案来,下面简单的描述下,希望能说的清楚.
首先我觉得需要二张图片,一张是编辑区域上面的没有横线的黄色区域,一张是编辑区域带横线的黄色区域
需要的组件有:UIScrollView一个,UIView一个,UITextView一个
叠加方式为:[UIScrollView addSubView:[UIView addSubView:UITextView]];
UIScrollView的背景设为第一张图片形式,即
_scrollView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"title.png"]];
其中_scrollView为UIScrollView,@"title.png"为第一张图片
UIView的背景设为第二张图片形式,即
_backView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"linemin.png"]];
其中_backlView为UIView,@"linemin.png"为第二张图片
UITextView的背景设为透明色
到此基本解决完毕了,但是有个问题就是默认光标被隐藏了UIScollView才会向下滑动以显示光标.
...
要实现自己控制光标的显示位置需要解决二个问题,第一是知道光标的坐标,另一个是如何无误先控制UIScollView滚动.
计算光标的坐标比较麻烦,经过几天的学习,找到了计算光标坐标的方法
下面的代码可计算出光标的y坐标(我们只要y坐标,x坐标经过一些补充也可计算出来,自己添加)
- (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);
}
到此可计算出光标Y坐标,这样用UIScollView的contentOffset设置滚动时还存在问题,就是会和默认到光标消失滚动的方法产生干扰.
我们可以通过重载UIScollView的- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;方法屏蔽默认到光标消失滚动的方法,并加入自己的控制方法.
到此,一个比较完整的解决方案产生了.
大家积极思考,看看有没有更好的解决方法.
by MAC-z