it-swarm-id.com

UIButton dengan dua baris teks pada judul (numberOfLines = 2)

Saya mencoba membuat UIButton yang memiliki dua baris teks pada titleLabel-nya. Ini adalah kode yang saya gunakan:

    UIButton *titleButton = [[UIButton alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
    titleButton.titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
    [titleButton setTitle:@"This text is very long and should get truncated at the end of the second line" forState:UIControlStateNormal];
    titleButton.titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    titleButton.titleLabel.numberOfLines = 2;
    [self addSubview:titleButton];

Ketika saya mencoba ini, teks hanya muncul di satu baris. Tampaknya satu-satunya cara untuk mencapai lebih dari satu baris teks di UIButton.titleLabel adalah dengan mengatur numberOfLines=0 dan menggunakan UILineBreakModeWordWrap. Tapi ini tidak menjamin teks menjadi dua baris.

Namun, menggunakan UILabel yang sederhana tidak akan berhasil:

    UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
    titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
    titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
    titleLabel.numberOfLines = 2;
    titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
    [self addSubview:titleLabel];

Adakah yang tahu cara membuat UIButton bekerja dengan dua baris? Apakah satu-satunya solusi untuk membuat UILabel terpisah untuk menampung teks, dan menambahkannya sebagai subview tombol?

76
marketer

Jawaban yang diperbarui untuk versi iOS yang lebih baru

Karena ini adalah jawaban yang diterima, tambahkan jawaban @ Sean di sini:

Setel properti ini pada titleLabel tombol Anda.

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2; // if you want unlimited number of lines put 0

Swift 3 dan 4:

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.numberOfLines = 2 // if you want unlimited number of lines put 0

Jawaban asli untuk versi iOS yang lebih lama

Jika Anda ingin 2 baris teks di atas UIButton Anda, Anda harus menambahkan UIlabel di atasnya yang melakukan hal itu.

UILabel *titleLabel = [[UILabel alloc] initWithFrame:CGRectMake(15, 10, frame.size.width-100, 100)];
titleLabel.font = [UIFont boldSystemFontOfSize:24.0];
titleLabel.text = @"This text is very long and should get truncated at the end of the second line";
titleLabel.numberOfLines = 2;
titleLabel.lineBreakMode = UILineBreakModeTailTruncation;
[myButton addSubview:titleLabel]; //add label to button instead.

Diperbarui untuk solusi pembangun antarmuka

Menambahkan jawaban @Borut Tomazin untuk jawaban yang lebih lengkap . Memperbarui bagian ini lagi karena jawaban @Borut Tomazin ditingkatkan.

Anda dapat melakukan ini lebih mudah, tanpa perlu kode. Di Interface Builder atur Line Break pada UIButton ke Word Wrap. Daripada Anda dapat memasukkan beberapa baris judul. Tekan saja tombol Option + Return untuk membuat baris baru. Anda juga perlu menambahkan ini ke Atribut Runtime yang Ditentukan Pengguna dalam Pembuat Antarmuka:

titleLabel.textAlignment Number [1]
71
Totumus Maximus

Anda tidak perlu menambahkan label UIL ke tombol UIB. Itu hanya benda ekstra dan bekerja.

Setel properti ini pada titleLabel tombol Anda.

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.numberOfLines = 2;//if you want unlimited number of lines put 0

Cepat:

button.titleLabel!.lineBreakMode = NSLineBreakMode.ByWordWrapping
button.titleLabel!.numberOfLines = 2//if you want unlimited number of lines put 0
145
Sean

Anda dapat melakukan ini lebih mudah, tanpa perlu kode. Di Interface Builder atur Line Break pada UIButton ke Word Wrap. Daripada Anda dapat memasukkan beberapa baris judul. Tekan saja tombol Option + Return untuk membuat baris baru. Anda juga perlu menambahkan ini ke Atribut Runtime yang Ditentukan Pengguna dalam Pembuat Antarmuka:

titleLabel.textAlignment Number [1]

Sesederhana itu. Semoga ini bisa membantu ...

86
Borut Tomazin
 button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;

button.titleLabel.textAlignment = NSTextAlignmentCenter;

[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];
19
Suraj K Thomas

Untuk menghindari sepenuhnya perlunya mengedit kode, dan dengan demikian kebutuhan untuk mengelompokkan tampilan Anda, dalam Xcode5 dan yang lebih tinggi, Anda dapat mengikuti saran Borut Tomazin:

Di Interface Builder (atau storyboard) set Line Break to Word Wrap. Daripada Anda dapat memasukkan beberapa baris judul. Tekan saja Option + Return kunci untuk membuat garis baru.

dan kemudian, di Atribut Runtime yang Didefinisikan Pengguna Anda dapat menambahkan

Jalur utama: titleLabel.textAlignment
Jenis: Number
Nilai: 1

Catatan: ini mungkin tidak sepenuhnya "bukti masa depan" karena kami menerjemahkan konstanta UITextAlignmentCenter ke dalam nilai numeriknya (dan konstanta itu dapat berubah ketika versi iOS baru dirilis), tetapi tampaknya aman di waktu dekat.

9
furins

Anda dapat memodifikasi nilai yang diperlukan langsung dari Storyboard . Pilih tombol, pergi ke inspektur identitas dan tambahkan pasangan nilai kunci berikut di bagian "Atribut runtime yang ditentukan pengguna":

 enter image description here

0
Arik Segal