ボーダー付きのUITextView


127

の周りに薄い灰色の境界線を付けたいですUITextView。私はAppleのドキュメントを調べましたが、そこでプロパティを見つけることができませんでした。助けてください。

回答:


306
#import <QuartzCore/QuartzCore.h>

....

// typically inside of the -(void) viewDidLoad method
self.yourUITextView.layer.borderWidth = 5.0f;
self.yourUITextView.layer.borderColor = [[UIColor grayColor] CGColor];

62
私はそれが本当に多くの説明を必要とするとは思いませんでした、ビューはUITextViewであり、コードはビューを設定した場所に行きます(awakeFromNibまたはviewDidLoadは2つの可能な場所です)。与えられたコードがなかったので、応答で良いコンテキストを与える方法はありません。
Kendall Helmstetter Gelner、2011

XCodeでは、レイヤーの境界線を設定できません。レイヤーは読み取り専用であることを示しています。UIView(いくつかの要素を配置する場所)を作成し、そのビューに境界線を設定しようとしました。これを実行しようとしていますがself.myView.layer.borderWidth ...
前述のとおり

2
QuartzCoreをインポートしましたか?また、self.myViewからCALayerを取り出し、それにborderWidthを設定してみることもできます。設定可能です。
Kendall Helmstetter Gelner 2012

UIViewの中で読み取り専用であること、「層」にいくつかのより多くの情報(レイヤプロパティがあるが、あなたは、ビューのレイヤに値を設定することができます):stackoverflow.com/questions/12837077/...
ケンドールHelmstetter Gelner

42

丸みを帯びた角のために以下を追加します:

self.yourUITextview.layer.cornerRadius = 8; 

23

これが、TextView"tbComments"という名前のコントロールの周囲に境界線を追加するために使用したコードです。

self.tbComments.layer.borderColor = [[UIColor grayColor] CGColor];
self.tbComments.layer.borderWidth = 1.0;
self.tbComments.layer.cornerRadius = 8;

そして、それはどのように見えるかです:

ここに画像の説明を入力してください

かんたん。


19

UIImageViewサブビューとして追加しUITextViewます。これはUITextField、上から下へのグラデーションを含む、のネイティブの境界線と一致します。

ここに画像の説明を入力してください

textView.backgroundColor = [UIColor clearColor];
UIImageView *borderView = [[UIImageView alloc] initWithFrame: CGRectMake(0, 0, textView.frame.size.width, textView.frame.size.height)];
borderView.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
UIImage *textFieldImage = [[UIImage imageNamed:@"TextField.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(15, 8, 15, 8)];
borderView.image = textFieldImage;
[textField addSubview: borderView];
[textField sendSubviewToBack: borderView];

これらは私が使用するpng画像とjpg表現です:

@ 1x

@ 2x

ここに画像の説明を入力してください


良い解決策。これらの画像はあなたのものですか?それらを自由に使用できますか?
James Webster

これらの画像は、アップル自身のアプリで使用されているものをモデルにしています。実際、私はそれらを抽出し、もしあれば、ごくわずかの変更を行いました。自己責任。目標は、ネイティブのルックアンドフィールを模倣することでしたので、大きく異なるものを思い付くのは困難です。それだけの価値があるため、私は問題なくこの画像を使用してアプリを出荷し、承認しました。
Ben Packard、

png画像ファイルは削除されているようです。jpgが機能しない場合は、申し訳ありませんが、これを新しい画像の場所で常に更新するつもりはありません。コメントでリクエストされたときに、再アップロードできます。
Ben Packard、

3
画像が添付されている場合、これは最もよく機能します:coderesizableImageWithCapInsets:UIEdgeInsetsMake(
28、14、28、14

WikiUploadリンク(2つの画像用)が画像ファイルを見つけることができません。;-(
マイクグレッドヒル2014

18

CGColorうまく機能しますが、色はである必要がありますUIColor

view.layer.borderWidth = 5.0f;
view.layer.borderColor = [[UIColor grayColor] CGColor];

4
#import <QuartzCore / QuartzCore.h>
kolinko

6

上記の回答は以前のバージョンのSwiftに対するものだと思います。私は少しグーグル化し、以下のコードはSwift 4で機能します。

self.textViewName.layer.borderColor = UIColor.lightGray.cgColor
self.textViewName.layer.borderWidth = 1.0
self.textViewName.layer.cornerRadius = 8

ハッピーコーディング!


:Swift5とダークモードではあなたもシステムカラーを使用することができますself.textViewName.layer.borderColor = UIColor.systemGray4.cgColor
群衆

4

Swiftプログラミングの場合、これを使用してください

tv_comment.layer.borderWidth = 2
tv_comment.layer.borderColor = UIColor(red: 0.2, green: 0.2, blue: 0.2, alpha: 1).CGColor

またはちょうどUIColor(white: 0.2, alpha: 1).CGColor
レオ

3

これは、元のUITextFieldからできる限り近いです

func updateBodyTextViewUI() {
    let borderColor = UIColor.init(red: 212/255, green: 212/255, blue: 212/255, alpha: 0.5)

    self.bodyTextView.layer.borderColor = borderColor.CGColor
    self.bodyTextView.layer.borderWidth = 0.8
    self.bodyTextView.layer.cornerRadius = 5
}


0

iOS 8とXcode 6の時点で、UITextViewをサブクラス化し、サブクラスをIB_DESIGNABLEとしてマークすることで最善の解決策が見つかるので、ストーリーボードで境界線を表示できます。

ヘッダ:

#import <UIKit/UIKit.h>

IB_DESIGNABLE

@interface BorderTextView : UITextView

@end

実装:

#import "BorderTextView.h"

@implementation BorderTextView

- (void)drawRect:(CGRect)rect
{
    self.layer.borderWidth = 1.0;
    self.layer.borderColor = [UIColor blackColor].CGColor;
    self.layer.cornerRadius = 5.0f;
}

@end

次に、UITextViewをストーリーボードにドラッグし、そのクラスをBorderTextViewに設定します。


0

(ここでの答えに従うことに加えて)それを機能させたのはborderStyle属性を追加することです:

#import <QuartzCore/QuartzCore.h>
..

phoneTextField.layer.borderWidth = 1.0f;
phoneTextField.layer.borderColor = [[UIColor blueColor] CGColor];
phoneTextField.borderStyle = UITextBorderStyleNone;

0

ほんの少しの追加。ボーダーを少し広くすると、テキストの左側と右側が邪魔になります。それを避けるために、次の行を追加しました。

self.someTextView.textContainerInset = UIEdgeInsetsMake(8.0, 8.0, 8.0, 8.0);

0

Swift 3では、次の2行を使用できます。

myText.layer.borderColor = UIColor.lightGray.cgColor

myText.layer.borderWidth = 1.0

-3

ストーリーボードでこの問題を完全に無効UIButtonにしてUITextViewUITextViewclearColorの背景色を作成することで解決しました。これは、追加のコードやパッケージを必要とせずに機能します。


3
もちろん、ボタンにエッジがないため、これはiOS 7では機能しません(ボタンは現在ラベルのように見えます)
Mike Gledhill
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.