我正在为iPad开发一个简单的文本编辑应用程序.我想设置左/右边距,如附图.只是将UITextView添加到另一个宽度较大的UIView中将无法正常工作,因为滚动指示器将无法正确定位.
我没有使用UIView,而是将UITextView添加到UIScrollView中,它的工作原理几乎没有.但它们有时会显示奇怪的行为,而UITextViewDelegate不适用于我的UIViewController.
有没有办法只使用UITextView设置左/右边距?谢谢.

我正试图在iPad中设置一个CTFrame与我UITextView的文本格式完全匹配的文件.首先,我将UITextView文本转换为属性字符串.然后我设置了绘图框的宽度和高度,其中Core Text将绘制文本.我成功地使用Core Text绘制文本,但UITextViewCore Text显示略有不同的结果,即使我使用相同的字体和大小.具体来说,当我使用时[UIFont systemFontOfSize:21],每个空格中的UITextView像素比Core Text的结果多一个像素.
对于短句或单词是可以的,但如果UITextView和Core Text有多行,则它们的结果会变得非常不同.例如,UITextView对行尾的一个单词执行自动换行,而Core Text将该单词保留在同一行.如果你看到附图,最后一个单词"段落"的起始位置已经非常不同了(由于8个空格字符,8个像素的间隙).
更糟糕的是,如果我使用不同的字体,例如添加到我的项目中的自定义字体,则每个字符都会UITextView有1个像素.
我正在使用Core Text来查找当前光标的像素位置UITextView,因此它们彼此完全匹配,每行包含相同数量的字符和单词.
问题:有没有办法使Core Text对象与UITextView的文本格式完全匹配?
谢谢!
这是我如何设置属性字符串的代码.(我刚刚关注了Core Text Guide.)
CTFontRef font = CTFontCreateWithName((CFStringRef) [UIFont systemFontOfSize:21.0].fontName, 21.0, NULL);
CFMutableAttributedStringRef attrString2 = CFAttributedStringCreateMutable(kCFAllocatorDefault, 0);
CFAttributedStringReplaceString (attrString2, CFRangeMake(0, 0), (CFStringRef) string);
CFAttributedStringSetAttribute(attrString2, CFRangeMake(0, [string length]),kCTFontAttributeName, font);
Run Code Online (Sandbox Code Playgroud)
这是一张照片.

我正在尝试为使用UITextView的应用程序实现字数统计功能.
英语中两个单词之间有一个空格,因此在英语句子中计算单词数量非常容易.中文和日文单词计数会出现问题,因为通常整个句子中没有任何空格.
我在iPad中检查了三个具有字数统计功能的不同文本编辑器,并将它们与MS Words进行比较.
例如,这里有一系列日文字符意味着世界的想法:世界(世界)の('s)アイデア(想法)
世界のアイデア
1)iPad和MS的页面单词将每个字符计为一个单词,因此它包含7个单词.
2)iPad文本编辑器P***将整个计为一个单词 - >他们只是用空格来分隔单词.
3)iPad文本编辑器i***将它们视为三个单词 - >我相信他们将CFStringTokenizer与kCFStringTokenizerUnitWord一起使用,因为我可以获得相同的结果)
我在互联网上进行过研究,而Pages和MS Words的单词计数似乎是正确的,因为每个汉字都有意义.
我找不到任何类似Pages或MS Words这样的词的类,从头开始实现它是非常困难的,因为除了日语和中文之外,iPad还支持很多不同的外语.
我认为CFStringTokenizer与kCFStringTokenizerUnitWord是最好的选择.
有没有办法计算NSString中的单词,如Pages和MSWords?
谢谢
这可能是一个愚蠢的问题.我正试图设置左/右边距,如附图.我通过将UITextView添加到UIScrollView来成功实现它.但是,我可以单独用UITextView实现我想要的几乎所有东西.例如,使用UIScrollView,当我手动更改UITextView的文本时,无论将.scrollEnabled设置为否,它都会自动滚动到底部.
如果UITextView的滚动指示符出现在UITextView外部,那将是完美的.在附图中,假设红色框表示整个UITextView.我试图更改UITextView的scrollIndicatorInsets属性,但滚动指示器只能向内移动才能看到.
一些应用程序,如Pages,aWriter,Plaintext实现了此功能.你能提出任何建议吗?
谢谢!
一世 
我正在为iPad开发一个简单的写作应用程序.
我正在尝试计算光标的像素位置UITextView.我花了几个星期来设计这个,但我仍然无法想象这样做.
在stackoverflow中,Tony编写了一个很好的算法来查找光标的像素位置.
我通过一些修改实现了它,它几乎可以工作,它给出了正确的光标像素位置.但是,它只适用于英文字母.
如果行尾有中文或日文字符UITextView,即使汉字之间没有空格,也要进行字符包装而不是自动换行.我认为Tony的算法UITextView只能执行自动换行(使用英文字母).
有没有其他方法可以找到光标的像素位置UITextView?
或者有没有办法确定一个特定的字符是否像汉字一样包含字符或像英语一样包装?
加成:
这是我基于Tony算法的实现.我一个放置UITextView在一个横向模式,因此,其宽度为1024,我使用具有尺寸21的自定义字体你应该改变sizeOfContentWidth和sizeOfContentLine适当.sizeOfContentWidth小于实际宽度,并且sizeOfContentLine大于实际字体大小(行高>字体大小).
对于杂乱的代码和评论抱歉!还有一些小错误,如果你在行尾输入中文字符(没有自动换行),它会给出错误的位置.
#define sizeOfContentWidth 1010
#define sizeOfContentHeight 1000
#define sizeOfContentLine 25
// Stores the original position of the cursor
NSRange originalPosition = textView.selectedRange;
// Computes textView's origin
CGPoint origin = textView.frame.origin;
// Checks whether a character right to the current cursor is a non-space character
unichar c = ' ';
if(textView.selectedRange.location != [textView.text …Run Code Online (Sandbox Code Playgroud) 有时,会发生电话等中断,并会干扰iPhone或iPad中应用的常规行为.
例如,我创建了一个UIScrollView实例并实现了UIScrollView委托方法:scrollViewWillBeginDragging和scrollViewDidEndDragging(以及scrollViewDidEndDecelerating).
scrollViewWillBeginDragging方法停用了我的应用程序中的所有自定义按钮.然后scrollViewDidEndDragging和scrollViewDidEndDecelerating方法激活这些自定义按钮.也就是说,当用户滚动时,所有自定义按钮都会暂停一段时间.
问题是,当用户开始拖动并且只是持有UIScrollView实例时,如果我通过按下主页按钮和电源按钮来截取屏幕截图,则不会调用scrollViewDidEndDragging和scrollViewDidEndDecelerating中的任何一个.所以应用程序搞砸了.
我在我的UIViewController中实现了一个UIApplicationWillResignActiveNotification方法,但在截取屏幕后没有调用它.
我如何能够捕获任何扰乱常规事件的中断?
有时,由于中断,touchesEnd和touchesCanceled也没有被调用.
谢谢.
我创建了自己的自定义视图,扩展了UIControl.此自定义视图具有自己的触摸实现.我在其中实现了touchesBegan,Moved,Ended和Canceled方法.
在主视图控制器中,我创建了此视图的多个实例.所以在屏幕上,有许多自定义按钮.
我想在我的应用程序中禁用多点触控.如果我单击一个自定义按钮,则其他按钮不应响应.
实际上,很容易实现这一点.当我按住一些按钮时,我可以将其他按钮的userInteractionEnabled属性设置为NO,直到我结束触摸.
但问题是,当我同时点击这几个按钮时,两个或多个touchesBegan方法同时工作,并且消息传递被搞砸了.
我试图设置multiTouchEnabled = NO和exclusiveTouch = YES,但它仍然无效.
如何在我的应用程序中强制禁用多点触控?
谢谢.
- (NSString *)allocString{
NSString *str = [[NSString alloc] init];
return str;
}
- (void)viewDidLoad{
NSString *name = [self allocString];
[name release]; // Can I release an object here?
}
Run Code Online (Sandbox Code Playgroud)
嗨,我刚刚用NSString写了一个简单的例子.在我的真实程序中,我使用了自定义的UIView类,而不是NSString.
allocString创建一个NSString实例,其保留计数为1.没有自动释放,它只返回一个实例.
在viewDidLoad方法中,变量"name"只指向allocString方法返回的对象,因此实例的保留计数仍为1.
因此,[名称释放]会减少其保留计数.
这是正确的吗?或者我必须在allocString方法中自动释放它?谢谢!
我正在遵循以下视频中的"容器和组件"方法,以在Flux架构中构建可重用的组件.
React.js Conf 2015(22m 50s):https://youtu.be/KYzlpRvWZ6c?t = 22m50s
例如,我正在使用"下一步"按钮构建图像滑块.
ImageSliderContainer
ImageSlider
Next按钮
在Flux架构中,单击NextButton将向商店发送操作.然后,商店将更新"currentIndex"并发出更改事件.在我看来,ImageSlider不再可重复使用,因为它与单个商店紧密耦合,通过该商店将通知单个容器.
另一种选择是将状态"currentIndex"添加到ImageSlider组件.单击NextButton将通知ImageSlider更新其状态.但这会引入从NextButton到ImageSlider的反向数据流(违反Flux架构?).此外,它违反了"容器和组件"方法,其中组件只使用props呈现UI.
在Flux架构中制作可重用组件的最佳方法是什么?更具体地说,哪个元素(存储,容器,组件或其他东西)应该处理NextButton组件中发生的onClick事件?
编辑
根据答案,这里有一个满足Flux架构和"容器和组件"模式的解决方案.
我正在使用UITextView为iPad开发一个简单的文本编辑应用程序.我总是遇到UIScrollView和UITextView的一些问题.我想我只是期望从这两个方面得到太多东西.
当我将myTextView.text设置为另一个NSString实例时,会自动滚动.我可以通过设置来阻止这种滚动
myTextView.scrollEnabled = NO;
myTextView.text = newText;
myTextView.scrollEnabled = YES;
Run Code Online (Sandbox Code Playgroud)
但是,如果我更改了myTextView的selectedRange属性,则会发生滚动.
具体来说,如果selectedRange的范围发生在当前屏幕中的文本上,则不会发生滚动.
例如,如果我通过点击"全选"属性选择所有文本,则不会发生滚动.但是如果我通过将selectedRange设置为NSMakeRange(0,[myTextView.text length])来选择所有文本,则滚动到END(最后一个插入位置).
为了解决这些问题,1)我保存了myTextView的原始内容偏移量.
CGPoint originalOffset = myTextView.contentOffset;
// change myTextView.selectedRange here
myTextView.selectedRange = originalOffset
Run Code Online (Sandbox Code Playgroud)
但没有任何事情发生.
2)我使用NSTimer在几秒钟后调用上面的代码,并正确滚动返回到原始位置(偏移).但是,首先滚动到最后,然后到顶部..
有没有办法完全阻止UITextView的滚动片刻?
嗨,我正在开发一个简单的编写程序,UITextView用于研究Cocoa编程.在UITextView,每行具有不同的字符数.我试图更改字体UITextView,但每个字符的宽度似乎有所不同.例如,l和L具有不同的宽度.
反正有没有UITextView像emacs这样的每一行保持相同数量的字符,或者就像这个stackoverflow编辑框一样?
非常感谢.
iphone ×10
ipad ×9
ios ×8
uitextview ×7
uiscrollview ×3
alloc ×1
core-text ×1
count ×1
cursor ×1
events ×1
flux ×1
fonts ×1
interruption ×1
memory ×1
multi-touch ×1
nsstring ×1
objective-c ×1
reactjs ×1
reactjs-flux ×1