UITextView 光标定位定位

UITextView根据需求实现UITextField的placeholder效果,我通过添加默认提示文字并修改文字的颜色,监听键盘弹出时,修改光标定位

- (void)keyBordWillShow:(NSNotification *)note
{      //在最上层避免被挡住
        [self.view bringSubviewToFront:self.recommedTextView];
        //如果是备注提示内容,则光标定位在第一位
        if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) {
               self.recommedTextView.selectedRange = NSMakeRange(0,    
0);
            
        }
           
}

可是实现时候发现只有第一次进来的时候光标会在首位,查看日志,发现错误消息:

[Common] _BSMachError: port 80cb; (os/kern) invalid capability (0x14) "Unable to insert COPY_SEND"
[Common] _BSMachError: port 80cb; (os/kern) invalid name (0xf) "Unable to deallocate send right"

查询了解决方案之后,需要在主线程上修改光标定位,但是我比较疑惑的我设置断点调试,本来就是在主线程上的,为什么还需要再次回到主线程:

- (void)keyBordWillShow:(NSNotification *)note
{      //在最上层避免被挡住
        [self.view bringSubviewToFront:self.recommedTextView];
        //如果是备注提示内容,则光标定位在第一位
        if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) {
            //在主线程中修改
            dispatch_async(dispatch_get_main_queue(), ^{
                self.recommedTextView.selectedRange = NSMakeRange(0,    
0);
            });
            
        }
           
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容