1

UITextView でのテキスト編集を無効にしたいのですが、カーソルだけを残してください。キーボード、切り取り、コピー、貼り付けメニュー、ズーム編集モードは既に無効にしています。しかし、まだ 1 つの問題があります。TextView をダブルタップすると、単語全体が選択されます。もう1つ、単語の末尾または先頭だけでなく、カーソルで任意の場所を選択するにはどうすればよいですか?

私の問題をよりよく説明するスクリーンショットを作成しましたが、評判のために投稿できません。ですから、私が言いたいことを正確に理解していただけることを願っています。

UITextView のサブクラス:

#import "UIUneditableTextView.h"

@implementation UIUneditableTextView

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (BOOL)canPerformAction:(SEL)action withSender:(id)sender
{
    UIMenuController *menuController = [UIMenuController sharedMenuController];
    if (menuController) {
        [UIMenuController sharedMenuController].menuVisible = NO;
    }
    return NO;
}

-(void)addGestureRecognizerForLongPress:(UIGestureRecognizer *)gestureRecognizer
{
    if ([gestureRecognizer isKindOfClass:[UILongPressGestureRecognizer class]]){
        gestureRecognizer.enabled = NO;
    }
    [super addGestureRecognizer:gestureRecognizer];
    return;
}

@end
4

3 に答える 3

2

UITextInputこれは選択が制御される場所であるため、 のメソッドを見てください。として機能して、選択とキャレットを制御するタイミングとオーバーライドinputDelegateを見つけることができます。selectionWillChange:selectedTextRange

ドキュメント: http://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextInput_Protocol/Reference/Reference.html#//apple_ref/occ/intfp/UITextInput

于 2013-06-29T08:43:59.653 に答える
1

ここにSwiftの作業例があります

class TextView: UITextView {

    override func canPerformAction(action: Selector, withSender sender: AnyObject!) -> Bool {
        return false
    }

    override func gestureRecognizerShouldBegin(gestureRecognizer: UIGestureRecognizer!) -> Bool {
        if gestureRecognizer.isKindOfClass(UITapGestureRecognizer) && ((gestureRecognizer as UITapGestureRecognizer).numberOfTapsRequired == 1) {
            let touchPoint = gestureRecognizer.locationOfTouch(0, inView: self)
            let cursorPosition = closestPositionToPoint(touchPoint)
            selectedTextRange = textRangeFromPosition(cursorPosition, toPosition: cursorPosition)
            return true
        }
        else {
            return false
        }
    }

}
于 2014-07-24T09:04:36.063 に答える