Chciałem użyć niestandardowego tła dla mojego UITextFields
. Działa to dobrze, z wyjątkiem tego, że muszę użyć, UITextBorderStyleNone
aby wyglądać ładnie. To zmusza tekst do przylgnięcia w lewo bez dopełniania.
Czy mogę ustawić dopełnienie ręcznie, aby wyglądało podobnie, z UITextBorderStyleRoundedRect
wyjątkiem korzystania z niestandardowego obrazu tła?
ios
uitextfield
padding
Sebastian Wramba
źródło
źródło
*paddingView
wiele pól tekstowych?Utworzyłem tę kategorię implementacji i dodałem ją na początku
.m
pliku.Na podstawie linku udostępnionego przez Piotra Blasiaka. Wydawało się to prostsze niż stworzenie zupełnie nowej podklasy, a także prostsze niż dodanie dodatkowej
UIView
. Mimo to wydaje się, że czegoś brakuje, aby nie móc kontrolować wypełnienia w polu tekstowym.Rozwiązanie Swift 4:
źródło
Wersja Swift 3 dla Xcode> 6, w której można edytować wartość wstawki w Konstruktorze / Storyboard.
źródło
override func placeholderRectForBounds(bounds: CGRect) -> CGRect { return CGRectInset(bounds, inset, inset) }
@IBDesignable
i co@IBInspectable
robić, tj. Tego postu w nshipsterreturn super.textRectForBounds(CGRectInset(bounds, inset, inset))
, odpowiednio poradzisz sobie z przesunięciem widoków akcesoriów.Edycja: Nadal działa w systemie iOS 11.3.1
W iOS 6
myTextField.leftView = paddingView;
powoduje problemTo rozwiązuje problem
W przypadku wyrównanego do prawej pola tekstowego użyj
CATransform3DMakeTranslation(-5, 0, 0)
jako wzmianki przez latenitecoder w komentarzachźródło
Dobrym podejściem do dodawania dopełnienia do UITextField jest podklasa i dodanie właściwości edgeInsets. Następnie ustawisz edgeInsets, a pole UITextField zostanie odpowiednio narysowane. Będzie to również działać poprawnie z niestandardowym zestawem leftView lub rightView.
OSTextField.h
OSTextField.m
źródło
Wystarczy podklasować UITextField w następujący sposób:
Dodaje poziomą wyściółkę po 10 punktów z każdej strony.
źródło
Kod celu C
MyTextField.h
MyTextField.m
źródło
Ustaw klasę pola tekstowego na PaddingTextField i dostosuj dopełnianie, jak chcesz
Ciesz się
źródło
W oparciu o odpowiedź Evil Trout możesz chcieć utworzyć kategorię, aby ułatwić korzystanie z wielu aplikacji.
Plik nagłówka:
Plik implementacyjny:
Przykład użycia
Mam nadzieję, że to wam pomoże
Twoje zdrowie
źródło
Wersja szybka:
Abyś mógł przypisać wartość w IB
źródło
IBInspectable
pozwala na zastosowanie kodu ustawiającego w czasie wykonywania, więc po prostu wpisz swój numerInterface Builder
i będzie działać.Clear Button
. Twój wyraźny przycisk nie będzie widoczny, jeśli zastosujesz to rozwiązanie.Nie możesz ustawić paddingu. Zamiast tego
UIView
umieść obraz tła i jegoUITextField
wnętrze. UstawUITextField
szerokość jakoUIViewWidth-(paddingSize x 2)
i wysokość w podobny sposób, a następnie ustaw ją w punkciepaddingSize,paddingSize
.źródło
Wystarczy podklasę UITextField jak ta ( wersja Swift ):
Dodaje to dopełnienie w poziomie 25,0 punktów z każdej strony.
źródło
Opierałem się na rozwiązaniu Nate'a, ale potem odkryłem, że powoduje to problemy, gdy używasz właściwości leftView / rightView, więc lepiej dostrój implementację super, ponieważ weźmie ona pod uwagę lewy / prawy widok.
źródło
Zaktualizowana wersja dla Swift 3:
źródło
Ustaw wypełnianie dla UITextField za pomocą UITextBorderStyleNone: Swift
Na podstawie najbardziej głosowanej odpowiedzi @Evil Trout stworzyłem niestandardową metodę w mojej klasie ViewController, jak pokazano poniżej:
Teraz mogę wywołać tę metodę wewnątrz (metoda viewDidLoad) i wysłać dowolny z moich TextFields do tej metody i dodać dopełnienie dla prawej i lewej strony oraz podać kolory tekstu i tła, pisząc tylko jedną linię kodu w następujący sposób:
Działa to doskonale na iOS 7! Wiem, że dodanie zbyt dużej liczby widoków może spowodować, że ta klasa będzie nieco cięższa do załadowania. Ale zaniepokojony trudnością związaną z innymi rozwiązaniami, byłem bardziej stronniczy w stosunku do tej metody i bardziej elastyczny w używaniu tej metody. ;)
Dzięki za Hack „Evil Trout”! (kokarda)
Pomyślałem, że powinienem zaktualizować fragment kodu tej odpowiedzi za pomocą Swift:
Ponieważ Swift pozwala nam pisać rozszerzenia dla istniejących klas, napiszmy to w ten sposób.
Stosowanie:
Mam nadzieję, że pomogłoby to komuś innemu!
Twoje zdrowie!
źródło
Oto jak to osiągnąć w SWIFT
Ratunek
źródło
Wersja Swift 2.0:
źródło
^ te sugestie są świetne dla tych, którzy programowo tworzą interfejs.
Ale dla tych z nas, którzy używają konstruktora interfejsu Xcode, są dwa LUŹNE ŁATWE SPOSOBY:
łatwiej: umieść UIImageView za polem tekstowym
najłatwiej: zmień styl obramowania na prosty czarny kwadrat (drugi od lewej opcji), a następnie dodaj obraz jako obraz tła. Obraz ma pierwszeństwo przed kwadratem, więc nadal dostajesz wypełnienie potrzebne do normalnego tła obrazu, bez faktycznego narysowania kwadratu.
EDYCJA: możesz również użyć czarnej kuli (trzecia od lewej opcja przy wybieraniu UITextBox w IB), nie działa ona w skrajnie prawym stylu „kuli graficznej”.
źródło
Jeśli ktoś szuka
Swift 4.0
wersji, poniżejextension
jest praca. Posiada zarównoLeft
iRight
dopełnienie dlaUITextField
. W rzeczywistości jest toIBInspectable
konfiguracja scenorysu. Możesz ustawić wartość bezpośrednio z Konstruktora interfejsów / Storyboard. Jest to testowany kod w wersji Swift 4.0 i Xcode 9.0Pamiętaj, że jeśli chcesz włączyć
Clear Button
to samoUITextField
musisz pozostawić Right Padding puste.źródło
Najlepszym sposobem na to jest utworzenie klasy za pomocą podklasy UITextField i pliku .m
w ten sposób przejdź do swojej serii ujęć lub Xib i kliknij Inspektora tożsamości i zastąp UITextfield własną opcją „CustomTextField” w klasie.
Uwaga: jeśli po prostu podasz dopełnienie z automatycznym układem pola tekstowego, aplikacja nie będzie działać i wyświetli się tylko pusty ekran.
źródło
Wersja Swift 3:
źródło
Odpowiedź Nate Flink jest moją ulubioną, ale nie zapominaj o widokach z prawej / lewej strony. Np. Dla
UITextField
podklasy:Powyższy kod tuż za wyściółkę
rightView
zUITextField
.źródło
Rozwiązanie Swift 3
źródło
Oto kod Swift, który podaje padding w polu UIText
i dzwoń za pomocą
źródło
możesz użyć kategorii. ustaw padding w lewo i prawo
UITextField + Padding.h
UITextField + Padding.m
możesz ustawić padding w ten sposób self.phoneNumTF.paddingValue = 10.f; lub self.phoneNumTF.leftPadding = 10.f;
źródło
Odpowiedź @ Evil pstrąga jest świetna. Używam tego podejścia od dłuższego czasu. Jedyne, czego brakuje, to „radzenie sobie z wieloma polami tekstowymi”. Próbowałem innych metod, ale nie działa.
Podklasowanie UITextField po prostu dodanie dopełnienia nie miało dla mnie sensu. Powtórzyłem wszystkie pola UITextField, aby dodać dopełnienie.
źródło
textfieldarray
nie jest zdefiniowana w drugimif
bloku, kiedyś ten fragment (dzięki!) Z powodzeniem po wymianie zawartość drugiegoif
zfor(id subSubView in [view subviews]){[self addPaddingToAllTextFields:subSubView];}
Rozwiązanie Brody działało idealnie dla mnie. Musiałem dodać widoki z boku na polu tekstowym i dodać dodatkowe wypełnienie. Dzięki wdrożeniu niestandardowej właściwości UIEdgeInsets do podklasy UITextField udało mi się osiągnąć to zadanie. Użyję tej nowej podklasy we wszystkich moich projektach.
źródło
Najlepszym rozwiązaniem, jakie do tej pory znalazłem, jest kategoria. W ten sposób dodaję 5-punktowe wypełnienie po lewej i prawej stronie:
# Pragma służy tylko do usuwania irytujących ostrzeżeń
źródło
doda obramowanie, które działało dla mnie jako wypełnienie.
źródło
Inną kwestią jest to, że jeśli masz więcej niż jedno miejsce, w
UITextField
którym dodajesz dopełnienie, jest utworzenie osobnegoUIView
dla każdego pola tekstowego - ponieważ nie można ich udostępniać.źródło