Frage

Ich bin mit einer Textansicht als Kommentar Komponisten.

Im Eigenschafteninspektor Ich kann nicht so etwas wie eine Grenze Stil Immobilie finden, so dass ich Verwendung ein abgerundeter rect machen kann, so etwas wie UITextField.

Also, die Frage ist: Wie kann ich ein UITextView wie ein UITextField mit abgerundeter rect Stil

?
War es hilfreich?

Lösung

Es gibt keinen impliziten Stil, den Sie wählen haben, geht es um ein Stück Code Schreiben des QuartzCore Framework:

//first, you
#import <QuartzCore/QuartzCore.h>

//.....

//Here I add a UITextView in code, it will work if it's added in IB too
UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];

//To make the border look very close to a UITextField
[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]];
[textView.layer setBorderWidth:2.0];

//The rounded corner part, where you specify your view's corner radius:
textView.layer.cornerRadius = 5;
textView.clipsToBounds = YES;

Es funktioniert nur auf OS 3.0 und höher, aber ich denke, jetzt ist es die de-facto-Plattform sowieso.

Andere Tipps

Dieser Code funktionierte gut für mich:

    [yourTextView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
    [yourTextView.layer setBorderColor: [[UIColor grayColor] CGColor]];
    [yourTextView.layer setBorderWidth: 1.0];
    [yourTextView.layer setCornerRadius:8.0f];
    [yourTextView.layer setMasksToBounds:YES];

Swift 3 Version

Nach der Textansicht im Interface Builder einrichten.

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView.layer.cornerRadius = 5     
    textView.layer.borderColor = UIColor.gray.withAlphaComponent(0.5).cgColor
    textView.layer.borderWidth = 0.5  
    textView.clipsToBounds = true
}

Swift 2.2 Version

@IBOutlet weak var textView: UITextView!

override func viewDidLoad() {
    super.viewDidLoad()
    textView.layer.cornerRadius = 5     
    textView.layer.borderColor = UIColor.grayColor().colorWithAlphaComponent(0.5).CGColor
    textView.layer.borderWidth = 0.5  
    textView.clipsToBounds = true
}

Bearbeiten: Sie müssen importieren

#import <QuartzCore/QuartzCore.h>

für Eckenradius verwenden.

Versuchen Sie, diese wird es sicher funktionieren

UITextView* txtView = [[UITextView alloc] initWithFrame:CGRectMake(50, 50, 300, 100)];
txtView.layer.cornerRadius = 5.0;
txtView.clipsToBounds = YES;

Als Rob dachte es zur Festlegung der, wenn Sie die Rahmenfarbe als UITextField ähnlich sein wollen, dann müssen Sie die Rahmenbreite auf 2,0 und die Farbe ändern, indem Sie die folgende Zeile grau

[textView.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor]]; 
[textView.layer setBorderWidth:2.0];

wollte ich den real deal, so füge ich hinzu UIImageView als Subview der UITextView. Dies entspricht der nativen Grenze auf einem UITextField, einschließlich der Steigung von oben nach unten:

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];

Das sind die Bilder, die ich verwende:

eingeben Bild Beschreibung hier eingeben Bild Beschreibung hier

Eine Lösung ist auf hinzufügen, eine UITextField unter dem UITextView , macht den UITextView Hintergrund transparent und deaktivieren Sie jegliche Interaktion mit dem Benutzer auf dem UITextField. Dann im Code den UITextField Rahmen wie das mit etwas ändern

self.textField.frame = CGRectInset(self.textView.frame, 0, -2);

Sie haben genau das gleiche Aussehen wie ein Textfeld.

Und wie von Jon vorgeschlagen, sollten Sie dieses Stück Code in [UIViewController viewDidLayoutSubviews] auf iOS 5.0 + setzen.

Für die beste Wirkung haben Sie ein benutzerdefiniertes (dehnbares) Hintergrundbild zu verwenden. Dies ist auch, wie der abgerundeten Ränder des UITextField gezogen.

Ein Weg, ich fand es ohne Programmierung zu tun, ist das Textfeld eines Hintergrund transparent zu machen, dann eine Runde Rect Knopf dahinter platzieren. Achten Sie auf die Schaltfläche Einstellungen ändern deaktivieren und deaktivieren Sie das Kontrollkästchen Disable adjusts image.

Sie möchten meine Bibliothek überprüfen, genannt DCKit .

Sie wäre in der Lage eine abgerundete Ecke Textansicht (sowie Textfeld / Knopf / plain UIView) von den Interface Builder direkt zu machen:

Es ist auch viele andere nützliche Funktionen, wie zum Beispiel Textfelder mit Validierung hat, steuert mit Grenzen, gestrichelte Grenzen, Kreis und Haar Ansichten etc.

Ich weiß, es gibt bereits viele Antworten auf diese, aber ich fand nicht wirklich einer von ihnen ausreichend (zumindest in Swift). Ich wollte eine Lösung, die genau die gleiche Grenze wie ein UITextField (nicht eine angenäherten eines, die Art sieht aus wie es jetzt aussieht, aber eine, die genau wie es aussieht, und wird immer genau so aussehen wie es). Ich brauchte eine UITextField zu verwenden, um die UITextView für den Hintergrund zurück, konnte aber jedes Mal, wenn separat zu erstellen zu haben.

Die Lösung ist eine UITextView, die seine eigene UITextField für die Grenze liefert. Dies ist eine abgespeckte Version meiner vollständigen Lösung (die „Platzhalter“ Unterstützung für die UITextView in ähnlicher Art und Weise hinzufügt) und wurde hier gepostet: https://stackoverflow.com/a/36561236/1227119

// This class implements a UITextView that has a UITextField behind it, where the 
// UITextField provides the border.
//
class TextView : UITextView, UITextViewDelegate
{
    var textField = TextField();

    required init?(coder: NSCoder)
    {
        fatalError("This class doesn't support NSCoding.")
    }

    override init(frame: CGRect, textContainer: NSTextContainer?)
    {
        super.init(frame: frame, textContainer: textContainer);

        self.delegate = self;

        // Create a background TextField with clear (invisible) text and disabled
        self.textField.borderStyle = UITextBorderStyle.RoundedRect;
        self.textField.textColor = UIColor.clearColor();
        self.textField.userInteractionEnabled = false;

        self.addSubview(textField);
        self.sendSubviewToBack(textField);
    }

    convenience init()
    {
        self.init(frame: CGRectZero, textContainer: nil)
    }

    override func layoutSubviews()
    {
        super.layoutSubviews()
        // Do not scroll the background textView
        self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
    }

    // UITextViewDelegate - Note: If you replace delegate, your delegate must call this
    func scrollViewDidScroll(scrollView: UIScrollView)
    {
        // Do not scroll the background textView
        self.textField.frame = CGRectMake(0, self.contentOffset.y, self.frame.width, self.frame.height);
    }        
}
  

Ein Weg, ich fand es ohne Programmierung zu tun, ist das Textfeld eines Hintergrund transparent zu machen, dann eine Runde Rect Knopf dahinter platzieren. Achten Sie auf die Schaltfläche Einstellungen ändern zu deaktivieren, und deaktivieren Sie das Disable passt Bild Checkbox.

, um den Code Quartz versucht und fand es verursacht Verzögerung auf meinem alten 3G (ich zum Testen verwenden). Kein großes Problem, aber wenn Sie so umfassend wie möglich für verschiedene ios und Hardware sein wollen empfehle ich Andrew_L Antwort oben - oder Ihre eigenen Bilder machen und gelten entsprechend

.

Es gibt eine große Hintergrundbild, die den UITextView für das Senden von SMS-Nachrichten in iPhone-Messages App verwendet identisch ist. Sie werden Adobe Illustrator, um es & zu ändern. iphone ui Vektorelemente

#import <QuartzCore/QuartzCore.h>
- (void)viewDidLoad{
  UITextView *textView = [[UITextView alloc] initWithFrame:CGRectMake(50, 220, 200, 100)];
  textView.layer.cornerRadius = 5;
  textView.clipsToBounds = YES;
  [textView.layer setBackgroundColor: [[UIColor whiteColor] CGColor]];
  [textView.layer setBorderColor: [[UIColor grayColor] CGColor]];
  [textView.layer setBorderWidth: 1.0];
  [textView.layer setCornerRadius:8.0f];
  [textView.layer setMasksToBounds:YES];
  [self.view addSubView:textview];
}

Sie können ein Textfeld erstellen, die keine Ereignisse einer Textansicht auf, wie dies akzeptiert:

CGRect frameRect = descriptionTextField.frame;
frameRect.size.height = 50;
descriptionTextField.frame = frameRect;
descriptionTextView.frame = frameRect;
descriptionTextField.backgroundColor = [UIColor clearColor];
descriptionTextField.enabled = NO;
descriptionTextView.layer.cornerRadius = 5;
descriptionTextView.clipsToBounds = YES;

Wenn Sie Ihren Controller-Code sauber halten möchten, können Sie UITextView wie unter Unterklasse und die Klassennamen in dem Interface Builder ändern.

RoundTextView.h

#import <UIKit/UIKit.h>
@interface RoundTextView : UITextView
@end

RoundTextView.m

#import "RoundTextView.h"
#import <QuartzCore/QuartzCore.h>
@implementation RoundTextView
-(id) initWithCoder:(NSCoder *)aDecoder {
    if (self = [super initWithCoder:aDecoder]) {
        [self.layer setBorderColor:[[[UIColor grayColor] colorWithAlphaComponent:0.333] CGColor]];
        [self.layer setBorderWidth:1.0];
        self.layer.cornerRadius = 5;
        self.clipsToBounds = YES;
    }
    return self;
}
@end

Ich glaube nicht, dass es möglich ist. aber Sie können tun UITableView (gruppiert) mit 1 Abschnitt und 1 leere Zelle und verwenden Sie es als Container für Ihre UITextView.

Dies ist eine alte Frage, und ich war auch gesucht für diese Fragen zu beantworten. luvieeres' Antwort ist 100% richtig und später Rob etwas Code hinzugefügt. Das ist sehr gut, aber ich fand ein Dritter in weiteren Fragen beantworten was mir scheint sehr hilfreich. Ich war nicht nur für ähnliches Aussehen UITextField über UITextView gesucht, ich war auch für mehrzeilige Unterstützung gesucht. ChatInputSample erfüllt beides. Das ist, warum ich diese dritte Partei könnte denken, für andere hilfreich sein. Auch dank Timur erwähnte er diese Open-Source in hier .

In iOS7 die folgenden Spielen UITextField Grenze perfekt (zu meinem Auge mindestens):

textField.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.5] CGColor];
textField.layer.borderWidth = 0.5;
textField.layer.cornerRadius = 5;
textField.clipsToBounds = YES;

Es gibt keine Notwendigkeit zu importieren etwas Besonderes.

Dank @uvieere und @hanumanDev, deren Antworten gehen mir fast da:)

Hier ist meine Lösung:

- (void)viewDidLoad {
    [super viewDidLoad];


    self.textView.text = self.messagePlaceholderText;
    self.textView.layer.backgroundColor = [[UIColor whiteColor] CGColor];
    self.textView.layer.borderColor = [[[UIColor grayColor] colorWithAlphaComponent:0.3] CGColor];
    self.textView.layer.borderWidth = 0.5;
    self.textView.layer.cornerRadius = 5.5f;
    self.textView.layer.masksToBounds = YES;
    self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
}

- (void)textViewDidBeginEditing:(UITextView *)textView {
    if (textView == self.tvMessage) {
        // Delete placeholder text
        if ([self.textView.text isEqualToString:self.messagePlaceholderText]) {
            self.textView.text = @"";
            self.textView.textColor = [UIColor blackColor];
        }
    }
}

- (void)textViewDidEndEditing:(UITextView *)textView {
    if (textView == self.tvMessage) {
        // Write placeholder text
        if (self.textView.text.length == 0) {
            self.textView.text = self.messagePlaceholderText;
            self.textView.textColor = [[UIColor grayColor] colorWithAlphaComponent:0.4];
        }
    }
}

Wie wäre es nur:

UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(20, 20, 280, 32)];
textField.borderStyle = UITextBorderStyleRoundedRect;
[self addSubview:textField];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top