2016-04-30 7 views
1

私はUITextViewを持っていますが、右下にはUIButtonがあります。私のUITextViewは、複数行のテキストを許可します。つまり、テキスト入力の高さは、入力キー(SMSアプリに似ています)で動的に増加します。しかし、私の問題は、テキストを入力すると、テキストがUIButtonの後ろになるということです。私は、テキストがイメージに達したときに停止し、次の行にテキストが途切れることなく続けるようにします。これは可能ですか? enter image description hereUITextView:UITextViewテキストでインラインUIButtonを作成するiOS

+0

こんにちは@JMSを行うには、適切な解決策を見つけたのですか? – adnako

+0

私はそれを実装するために除外パスを使用しました。しかし、 'UITextView'でテキストが変わるたびに、除外パスを再設定する必要があります(' scrollViewDidScroll'メソッドを試してください)。 – JMS

+0

ありがとうございます。私はUITextViewをサブクラス化して、除外パスを正しい場所に修正します。 – adnako

答えて

0

リンゴによって提供されるText Kit Frameworkを使用します。あなたはここでは、この

を達成することができます線wenderlichのTUT https://www.raywenderlich.com/50151/text-kit-tutorial

具体的にあなたがしなければならない部分は、あなたのUITextView

UIBezierPath* exclusionPath = [_timeView curvePathWithOrigin:myButton.center]; 
_textView.textContainer.exclusionPaths = @[exclusionPath]; 
+0

ありがとうございます。やってみます。 – JMS

1

私にとっては、このソリューションの作業のためexclusionPathsに設定されているです。私はこのコードを置くUItextviewのサブクラスを持っています。

UIBezierPath* exclusionPath = [UIBezierPath bezierPathWithRect:_buttonClear.frame]; 
     self.textContainer.exclusionPaths = @[exclusionPath]; 
+0

はい、私は上記と同じことを試みました。しかし問題は、私の 'UITextView'高さが増加し続け、これによってy値が変化することです。この場合、私は何をすべきですか? – JMS

0

コードの下に試してみてください。

UIBezierPath* exclusionPath = [UIBezierPath bezierPathWithRect:Button.frame]; 
     self.textContainer.exclusionPaths = @[exclusionPath]; 

使用UITextView委任し、何かのように、

- (void)textViewDidChange:(UITextView *)textView 
{ 

    //Get Buttons Y position and Allow TextView Frame changes until it is less than or equal buttons Y position 

    if (textView.frame.origin.y+textView.frame.size.height < Button.frame.origin.y) { 

     CGFloat fixedWidth = textView.frame.size.width; 
     CGSize newSize = [textView sizeThatFits:CGSizeMake(fixedWidth, MAXFLOAT)]; 
     CGRect newFrame = textView.frame; 
     newFrame.size = CGSizeMake(fmaxf(newSize.width, fixedWidth), newSize.height); 
     textView.frame = newFrame; 
    } 

} 
関連する問題