UITextView根據(jù)需求實現(xiàn)UITextField的placeholder效果,我通過添加默認提示文字并修改文字的顏色,監(jiān)聽鍵盤彈出時,修改光標定位
- (void)keyBordWillShow:(NSNotification *)note
{ //在最上層避免被擋住
[self.view bringSubviewToFront:self.recommedTextView];
//如果是備注提示內(nèi)容,則光標定位在第一位
if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) {
self.recommedTextView.selectedRange = NSMakeRange(0,
0);
}
}
可是實現(xiàn)時候發(fā)現(xiàn)只有第一次進來的時候光標會在首位,查看日志,發(fā)現(xiàn)錯誤消息:
[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"
查詢了解決方案之后,需要在主線程上修改光標定位,但是我比較疑惑的我設置斷點調(diào)試,本來就是在主線程上的,為什么還需要再次回到主線程:
- (void)keyBordWillShow:(NSNotification *)note
{ //在最上層避免被擋住
[self.view bringSubviewToFront:self.recommedTextView];
//如果是備注提示內(nèi)容,則光標定位在第一位
if ([self.recommedTextView.text isEqualToString:NSLocalizedString(@"remark_content", nil)]) {
//在主線程中修改
dispatch_async(dispatch_get_main_queue(), ^{
self.recommedTextView.selectedRange = NSMakeRange(0,
0);
});
}
}