小编pnm*_*nmn的帖子

如何在UITextView中设置边距?

我正在为iPad开发一个简单的文本编辑应用程序.我想设置左/右边距,如附图.只是将UITextView添加到另一个宽度较大的UIView中将无法正常工作,因为滚动指示器将无法正确定位.

我没有使用UIView,而是将UITextView添加到UIScrollView中,它的工作原理几乎没有.但它们有时会显示奇怪的行为,而UITextViewDelegate不适用于我的UIViewController.

有没有办法只使用UITextView设置左/右边距?谢谢.

替代文字

iphone uiscrollview uitextview ipad ios

23
推荐指数
2
解决办法
1万
查看次数

核心文本与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)

-

-

这是一张照片.

替代文字

iphone uitextview ipad core-text ios

11
推荐指数
1
解决办法
4198
查看次数

计算NSString中的单词数

我正在尝试为使用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?

谢谢

iphone count nsstring uitextview ipad

9
推荐指数
1
解决办法
2639
查看次数

有没有办法将UITextView的滚动指示器放在UITextView外面?

这可能是一个愚蠢的问题.我正试图设置左/右边距,如附图.我通过将UITextView添加到UIScrollView来成功实现它.但是,我可以单独用UITextView实现我想要的几乎所有东西.例如,使用UIScrollView,当我手动更改UITextView的文本时,无论将.scrollEnabled设置为否,它都会自动滚动到底部.

如果UITextView的滚动指示符出现在UITextView外部,那将是完美的.在附图中,假设红色框表示整个UITextView.我试图更改UITextView的scrollIndicatorInsets属性,但滚动指示器只能向内移动才能看到.

一些应用程序,如Pages,aWriter,Plaintext实现了此功能.你能提出任何建议吗?

谢谢!

一世 替代文字

iphone uiscrollview uitextview ipad ios

8
推荐指数
1
解决办法
5746
查看次数

如何在UITextView中找到光标的像素位置?

我正在为iPad开发一个简单的写作应用程序.

我正在尝试计算光标的像素位置UITextView.我花了几个星期来设计这个,但我仍然无法想象这样做.

在stackoverflow中,Tony编写了一个很好的算法来查找光标的像素位置.

UITextView中光标的像素位置

我通过一些修改实现了它,它几乎可以工作,它给出了正确的光标像素位置.但是,它只适用于英文字母.

如果行尾有中文或日文字符UITextView,即使汉字之间没有空格,也要进行字符包装而不是自动换行.我认为Tony的算法UITextView只能执行自动换行(使用英文字母).

有没有其他方法可以找到光标的像素位置UITextView

或者有没有办法确定一个特定的字符是否像汉字一样包含字符或像英语一样包装?

加成:

这是我基于Tony算法的实现.我一个放置UITextView在一个横向模式,因此,其宽度为1024,我使用具有尺寸21的自定义字体你应该改变sizeOfContentWidthsizeOfContentLine适当.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 cursor uitextview ipad ios

6
推荐指数
1
解决办法
2943
查看次数

如何捕获UIScrollView或其他的cancallation?

有时,会发生电话等中断,并会干扰iPhone或iPad中应用的常规行为.

例如,我创建了一个UIScrollView实例并实现了UIScrollView委托方法:scrollViewWillBeginDragging和scrollViewDidEndDragging(以及scrollViewDidEndDecelerating).

scrollViewWillBeginDragging方法停用了我的应用程序中的所有自定义按钮.然后scrollViewDidEndDragging和scrollViewDidEndDecelerating方法激活这些自定义按钮.也就是说,当用户滚动时,所有自定义按钮都会暂停一段时间.

问题是,当用户开始拖动并且只是持有UIScrollView实例时,如果我通过按下主页按钮和电源按钮来截取屏幕截图,则不会调用scrollViewDidEndDragging和scrollViewDidEndDecelerating中的任何一个.所以应用程序搞砸了.

我在我的UIViewController中实现了一个UIApplicationWillResignActiveNotification方法,但在截取屏幕后没有调用它.

我如何能够捕获任何扰乱常规事件的中断?

有时,由于中断,touchesEnd和touchesCanceled也没有被调用.

谢谢.

iphone events ipad interruption ios

5
推荐指数
1
解决办法
428
查看次数

如何在有多个视图时禁用多点触控?

我创建了自己的自定义视图,扩展了UIControl.此自定义视图具有自己的触摸实现.我在其中实现了touchesBegan,Moved,Ended和Canceled方法.

在主视图控制器中,我创建了此视图的多个实例.所以在屏幕上,有许多自定义按钮.

我想在我的应用程序中禁用多点触控.如果我单击一个自定义按钮,则其他按钮不应响应.

实际上,很容易实现这一点.当我按住一些按钮时,我可以将其他按钮的userInteractionEnabled属性设置为NO,直到我结束触摸.

但问题是,当我同时点击这几个按钮时,两个或多个touchesBegan方法同时工作,并且消息传递被搞砸了.

我试图设置multiTouchEnabled = NO和exclusiveTouch = YES,但它仍然无效.

如何在我的应用程序中强制禁用多点触控?

谢谢.

iphone multi-touch ipad ios

4
推荐指数
1
解决办法
5611
查看次数

我可以返回已分配的对象并将其释放到函数外吗?

- (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方法中自动释放它?谢谢!

memory iphone objective-c alloc

3
推荐指数
1
解决办法
1363
查看次数

使用Flux体系结构中的内部事件创建可重用的React.js组件

我正在遵循以下视频中的"容器和组件"方法,以在Flux架构中构建可重用的组件.

React.js Conf 2015(22m 50s):https://youtu.be/KYzlpRvWZ6c?t = 22m50s


例如,我正在使用"下一步"按钮构建图像滑块.

ImageSliderContainer

  • ImageSliderStore和保持状态(例如,CURRENTINDEX)
  • 用道具渲染ImageSlider

ImageSlider

  • 无状态组件,仅基于道具进行渲染
  • 有一个子组件NextButton

Next按钮

  • 无状态组件,仅基于道具进行渲染
  • 有onClick事件

在Flux架构中,单击NextButton将向商店发送操作.然后,商店将更新"currentIndex"并发出更改事件.在我看来,ImageSlider不再可重复使用,因为它与单个商店紧密耦合,通过该商店将通知单个容器.

另一种选择是将状态"currentIndex"添加到ImageSlider组件.单击NextButton将通知ImageSlider更新其状态.但这会引入从NextButtonImageSlider的反向数据流(违反Flux架构?).此外,它违反了"容器和组件"方法,其中组件只使用props呈现UI.

在Flux架构中制作可重用组件的最佳方法是什么?更具体地说,哪个元素(存储,容器,组件或其他东西)应该处理NextButton组件中发生的onClick事件?


编辑

根据答案,这里有一个满足Flux架构和"容器和组件"模式的解决方案.

  • 容器拥有状态"currentIndex".该应用程序可能有多个容器,如ScreenshotSliderContainerDebugSliderContainer,每个容器都维护自己的"currentIndex".
  • 容器将onClick处理程序作为prop 传递给组件ImageSlider.onClick处理程序将一个动作发送到商店.
  • ImageSlider组件是无状态的的onClick处理程序转移到子组件Next按钮.
  • 因此,NextButton中的onClick事件不会影响顶级组件ImageSlider.只有容器使用新的道具呈现ImageSlider.

flux reactjs reactjs-flux

3
推荐指数
1
解决办法
1366
查看次数

如何完全禁用UITextView的滚动?

我正在使用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的滚动片刻?

iphone uiscrollview uitextview ipad ios

2
推荐指数
1
解决办法
7820
查看次数

UITextView每行中的字符数相同吗?

嗨,我正在开发一个简单的编写程序,UITextView用于研究Cocoa编程.在UITextView,每行具有不同的字符数.我试图更改字体UITextView,但每个字符的宽度似乎有所不同.例如,l和L具有不同的宽度.

反正有没有UITextView像emacs这样的每一行保持相同数量的字符,或者就像这个stackoverflow编辑框一样?

非常感谢.

iphone fonts uitextview ipad ios

1
推荐指数
1
解决办法
688
查看次数