คุณจะเพิ่มข้อความแบบหลายบรรทัดใน UIButton ได้อย่างไร


368

ฉันมีรหัสต่อไปนี้ ...

UILabel *buttonLabel = [[UILabel alloc] initWithFrame:targetButton.bounds];
buttonLabel.text = @"Long text string";
[targetButton addSubview:buttonLabel];
[targetButton bringSubviewToFront:buttonLabel];

... ความคิดที่ว่าฉันสามารถมีข้อความหลายบรรทัดสำหรับปุ่ม แต่ข้อความจะถูกบดบังโดย backgroundImage ของ UIButton เสมอ การเรียกการบันทึกเพื่อแสดงภาพตัวอย่างของปุ่มแสดงว่ามีการเพิ่ม UILabel แล้ว แต่ไม่สามารถมองเห็นข้อความได้ นี่เป็นข้อบกพร่องใน UIButton หรือฉันกำลังทำอะไรผิดหรือเปล่า?


7
button.titleLabel?.numberOfLines = 0
ma11hew28

2
หมายเหตุสำหรับ QA ที่เก่ามากนี้ใน Xcode ที่ทันสมัยมากเลือก "ATTRIBUTED TEXT"แล้วเลือกเล็กน้อย "เลือกตัวอักษร"
Fattie

ดูคำตอบที่อัพเดตสำหรับคำถามที่คล้ายกัน
ToolmakerSteve

ดูคำตอบนี้ (หลายบรรทัด, ความกว้างพอดี, ความสูงพอดี) สำหรับข้อความปุ่มstackoverflow.com/a/59211399/7523163
Hamid Reza Ansari

คำตอบ:


676

สำหรับ iOS 6 ขึ้นไปใช้สิ่งต่อไปนี้เพื่ออนุญาตหลายบรรทัด:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
// you probably want to center it
button.titleLabel.textAlignment = NSTextAlignmentCenter; // if you want to 
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

สำหรับ iOS 5 และต่ำกว่าใช้สิ่งต่อไปนี้เพื่ออนุญาตหลายบรรทัด:

button.titleLabel.lineBreakMode = UILineBreakModeWordWrap;
// you probably want to center it
button.titleLabel.textAlignment = UITextAlignmentCenter;
[button setTitle: @"Line1\nLine2" forState: UIControlStateNormal];

ปี 2017 สำหรับ iOS9 ไปข้างหน้า ,

โดยทั่วไปเพียงทำสองสิ่งนี้:

  1. เลือก"ข้อความที่แสดงคุณสมบัติ"
  2. ในป๊อปอัป "ตัวแบ่งบรรทัด" เลือก"การตัดคำ"

5
โปรดทราบว่าการมอบหมายเหล่านี้ถูกคัดค้านใน iOS 6 ดูคำตอบด้านล่างโดย @NiKKi สำหรับไวยากรณ์ที่อัปเดต
Aaron Brager

6
เพียงเพื่อให้ผู้คนรู้ว่า: มันไม่ทำงานถ้าคุณใช้ NSAttributedString
The Dude

29
ที่จริงแค่เพิ่ม button.titleLabel.numberOfLines = 0; ที่จะทำให้สายไม่ จำกัด และ button.titleLabel.textAlignment = NSTextAlignmentLeft; หากคุณต้องการให้ข้อความที่ถูกต้องเป็นชื่อเรื่องจะถูกจัดกึ่งกลางตามค่าเริ่มต้น
RyJ

4
อย่างรวดเร็วbutton.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping
Robert

1
ขอบคุณ @Robert สำหรับโซลูชั่นที่รวดเร็ว ยังสามารถใช้การอนุมานและละเว้นเครื่องหมายNSLineBreakModeดังนี้: button.titleLabel?.lineBreakMode = .ByWordWrapping.
mjswensen

145

คำตอบที่เลือกนั้นถูกต้อง แต่ถ้าคุณต้องการทำสิ่งนี้ใน Interface Builder คุณสามารถทำได้:

pic


58
ขอขอบคุณตัวฉันอายุ 24 ปีที่เขียนคำตอบนี้ด้วยตนเองตั้งแต่อายุ 28 ปี
Adam Waite

5
และจะอยู่กับการตั้งค่า Interface Builder เพียงหนึ่งควรตั้งtitleLabel.textAlignmentที่มีNumberคุณค่าให้กับ1ในUser Defined Runtime Attributedเพื่อให้ข้อความที่เป็นศูนย์กลาง
AnthoPak

2
ขอบคุณตัวเองอายุ 28 ปีจากตัวฉันอายุ 24 ปีของฉัน!
Daniel Springer

59

หากคุณต้องการเพิ่มปุ่มโดยที่ชื่อนั้นมีศูนย์กลางอยู่ที่หลายบรรทัดให้ตั้งค่าการตั้งค่าของเครื่องมือสร้างส่วนต่อประสานสำหรับปุ่ม:

[ ที่นี่]


คุณสามารถเพิ่มคำอธิบายที่เป็นข้อความเกี่ยวกับวิธีการทำสิ่งนี้ให้สำเร็จได้ไหม รูปภาพเป็นสิ่งที่ดี แต่ถ้าไม่สามารถใช้ได้คำตอบของคุณจะไร้ประโยชน์
Rory McCrossan

1
@RoryMcCrossan สวัสดีฉันได้เพิ่มรูปภาพด้านบน คุณดูได้ไหม โปรดทราบว่า Xcode 7 ยังมีข้อผิดพลาดดังนั้นชื่อปุ่มอาจหายไป อย่างไรก็ตามเมื่อคุณเรียกใช้แอพคุณจะได้ผลลัพธ์ที่ต้องการ
user5440039

2
นี่เป็นคำตอบที่ดีที่สุดในกระทู้นี้จริง ๆ แล้ว ทำงานได้ทันทีและแสดงข้อความกึ่งกลางจาก IB ขอบคุณ!
RainCast

@ user5440039 ขอบคุณสำหรับคำตอบที่ยอดเยี่ยม ไม่จำเป็นต้องเพิ่มคำอธิบายที่เป็นข้อความ
Fattie

54

สำหรับ IOS 6:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;

เช่น

UILineBreakModeWordWrap and UITextAlignmentCenter

เลิกใช้แล้วใน IOS 6 เป็นต้นไป ..


ด้านNSText.hในFoundationไม่มีการเพิ่มที่คัดค้าน มีให้ตั้งแต่ 6.0 แต่ไม่ได้คัดค้าน
Alex Cio

อย่างรวดเร็ว: button.titleLabel?.lineBreakMode = NSLineBreakMode.ByWordWrapping button.titleLabel?.textAlignment = NSTextAlignment.Center
jcity

30

ในการย้ำข้อเสนอแนะของโรเจอร์โนแลน แต่ด้วยรหัสที่ชัดเจนนี่เป็นคำตอบทั่วไป:

button.titleLabel?.numberOfLines = 0


13

ใน Xcode 9.3 คุณสามารถทำได้โดยใช้สตอรีบอร์ดด้านล่าง

ป้อนคำอธิบายรูปภาพที่นี่

คุณต้องตั้งค่าชื่อปุ่มข้อความการจัดตำแหน่งให้อยู่กึ่งกลาง

button.titleLabel?.textAlignment = .center

คุณไม่จำเป็นต้องตั้งค่าข้อความหัวเรื่องด้วยบรรทัดใหม่ (\ n) เช่นด้านล่าง

button.setTitle("Good\nAnswer",for: .normal)

เพียงตั้งชื่อ

button.setTitle("Good Answer",for: .normal)

นี่คือผลลัพธ์

ป้อนคำอธิบายรูปภาพที่นี่


myButton.titleLabel.textAlignment = NSTextAlignmentCenterจำเป็นต้องมีคำสั่งด้วย
tounaobun

11

มีวิธีที่ง่ายกว่ามาก:

someButton.lineBreakMode = UILineBreakModeWordWrap;

(แก้ไขสำหรับ iOS 3 ขึ้นไป :)

someButton.titleLabel.lineBreakMode = UILineBreakModeWordWrap;

4
UIButton.lineBreakMode เลิกใช้แล้วใน 3.0 ดังนั้นจึงไม่ใช่ตัวเลือกที่ดีอีกต่อไป
Christopher Pickslay

2
lineBreakMode เลิกใช้แล้วเป็นคุณสมบัติโดยตรงของ UIButton เราถูกนำไปที่ "ใช้คุณสมบัติ lineBreakMode ของ titleLabel แทน" ฉันแก้ไขคำตอบของ Valerii แล้ว มันยังคงเป็นตัวเลือกที่ดี
Wienke

11

จัดชิดซ้ายบน iOS7 ด้วยการจ่ายอัตโนมัติ:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentLeft;
button.contentHorizontalAlignment = UIControlContentHorizontalAlignmentLeft;

9

ฉันมีปัญหากับเลย์เอาต์อัตโนมัติหลังจากเปิดใช้งานหลายบรรทัดผลลัพธ์เป็นดังนี้: ดังนั้นขนาดจะไม่ส่งผลกระทบต่อขนาดของปุ่มที่ ฉันเพิ่มตาม(ในกรณีนี้ contentEdgeInsets คือ (10, 10, 10, 10 ) หลังจากโทร: หวังว่าจะช่วยคุณ (swift 5.0):
ป้อนคำอธิบายรูปภาพที่นี่
titleLabel
ConstraintscontentEdgeInsets
makeMultiLineSupport()
ป้อนคำอธิบายรูปภาพที่นี่

extension UIButton {

    func makeMultiLineSupport() {
        guard let titleLabel = titleLabel else {
            return
        }
        titleLabel.numberOfLines = 0
        titleLabel.setContentHuggingPriority(.required, for: .vertical)
        titleLabel.setContentHuggingPriority(.required, for: .horizontal)
        addConstraints([
            .init(item: titleLabel,
                  attribute: .top,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .top,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.top),
            .init(item: titleLabel,
                  attribute: .bottom,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .bottom,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.bottom),
            .init(item: titleLabel,
                  attribute: .left,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .left,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.left),
            .init(item: titleLabel,
                  attribute: .right,
                  relatedBy: .greaterThanOrEqual,
                  toItem: self,
                  attribute: .right,
                  multiplier: 1.0,
                  constant: contentEdgeInsets.right)
            ])
    }

}

ทำงานได้อย่างสมบูรณ์แบบรวดเร็ว 5 ฉันยังเพิ่มฟังก์ชั่นของฉันให้อยู่กึ่งกลางปุ่มด้วย func centerTextInButton () {Guard let titleLabel = titleLabel else {return} titleLabel.textAlignment = .center}
ShadeToD

ขอบคุณ. นั่นเป็นทางออกที่ดี
ระดับ

ฉันพบว่าการเพิ่มข้อ จำกัด ไม่จำเป็นเพียงแค่ตั้งค่าข้อความหลังจาก lineBreakMode / textAlignment / numberOfLines ถูกตั้งค่า และยังตั้ง titleEdgeInsets สำหรับสิ่งที่ใส่เข้าไปด้านบนและด้านล่าง
Bill Chan

@BillChan น่าเสียดายที่ไม่สามารถใช้งานได้ในทุกกรณี
Amir Khorsandi

7

ก่อนอื่นคุณควรระวังว่า UIButton มี UILabel อยู่ข้างในแล้ว –setTitle:forState:คุณสามารถตั้งค่าการใช้

ปัญหากับตัวอย่างของคุณคือคุณต้องตั้งค่าnumberOfLinesคุณสมบัติของ UILabel เป็นค่าอื่นนอกเหนือจากค่าเริ่มต้นที่ 1 คุณควรตรวจสอบlineBreakModeคุณสมบัติ


ฉันตระหนักถึงคุณสมบัติหัวเรื่อง แต่เท่าที่ฉันสามารถบอกได้ว่าเป็นไปไม่ได้ที่จะตั้งค่าให้ใช้มากกว่าหนึ่งบรรทัดดังนั้นวิธีการนี้ ถ้าฉันปิดการใช้งานพื้นหลังภาพ, UILabel ของฉันปรากฏขึ้นซึ่งฉันแนะนำข้อผิดพลาดอย่างใดอย่างหนึ่งนำมาใช้ Viewview ด้านหน้าหรือ UIButton ตัวเอง
Owain Hunt

4

สำหรับผู้ที่ใช้กระดานเรื่องราวของ Xcode 4 คุณสามารถคลิกที่ปุ่มและที่ด้านขวาของบานหน้าต่างยูทิลิตีใต้ตัวตรวจสอบแอตทริบิวต์คุณจะเห็นตัวเลือกสำหรับตัวแบ่งบรรทัด เลือกการตัดคำและคุณน่าจะดี


4

คำตอบที่นี่จะบอกวิธีทำให้ได้รับชื่อปุ่มหลายบรรทัดโดยทางโปรแกรม

ฉันแค่อยากจะเพิ่มว่าถ้าคุณใช้กระดานเรื่องราวคุณสามารถพิมพ์ [Ctrl + Enter] เพื่อบังคับให้ขึ้นบรรทัดใหม่ในฟิลด์ชื่อปุ่ม

HTH



3

ตามความคิดของเบรนต์ในการทำให้ชื่อ UILabel เป็นมุมมองพี่น้องฉันไม่ชอบความคิดที่ดีมาก ฉันคิดถึงปัญหาการโต้ตอบกับ UILabel เนื่องจากเหตุการณ์การสัมผัสไม่ผ่านมุมมองของ UIButton

ในทางกลับกันเมื่อใช้ UILabel เป็นมุมมองย่อยของ UIButton ฉันค่อนข้างสบายใจที่รู้ว่ากิจกรรมการสัมผัสจะเผยแพร่ไปยังมุมมองของ UILabel เสมอ

ฉันใช้วิธีนี้และไม่สังเกตเห็นปัญหาใด ๆ ที่รายงานด้วย backgroundImage ฉันเพิ่มรหัสนี้ใน -titleRectForContentRect: ของคลาสย่อย UIButton แต่รหัสนั้นยังสามารถวางไว้ในรูปวาดของรูทีน UIButton superview ซึ่งในกรณีนั้นคุณจะต้องแทนที่การอ้างอิงทั้งหมดด้วยตนเองด้วยตัวแปรของ UIButton

#define TITLE_LABEL_TAG 1234

- (CGRect)titleRectForContentRect:(CGRect)rect
{   
    // define the desired title inset margins based on the whole rect and its padding
    UIEdgeInsets padding = [self titleEdgeInsets];
    CGRect titleRect = CGRectMake(rect.origin.x    + padding.left, 
                                  rect.origin.x    + padding.top, 
                                  rect.size.width  - (padding.right + padding.left), 
                                  rect.size.height - (padding.bottom + padding].top));

    // save the current title view appearance
    NSString *title = [self currentTitle];
    UIColor  *titleColor = [self currentTitleColor];
    UIColor  *titleShadowColor = [self currentTitleShadowColor];

    // we only want to add our custom label once; only 1st pass shall return nil
    UILabel  *titleLabel = (UILabel*)[self viewWithTag:TITLE_LABEL_TAG];


    if (!titleLabel) 
    {
        // no custom label found (1st pass), we will be creating & adding it as subview
        titleLabel = [[UILabel alloc] initWithFrame:titleRect];
        [titleLabel setTag:TITLE_LABEL_TAG];

        // make it multi-line
        [titleLabel setNumberOfLines:0];
        [titleLabel setLineBreakMode:UILineBreakModeWordWrap];

        // title appearance setup; be at will to modify
        [titleLabel setBackgroundColor:[UIColor clearColor]];
        [titleLabel setFont:[self font]];
        [titleLabel setShadowOffset:CGSizeMake(0, 1)];
        [titleLabel setTextAlignment:UITextAlignmentCenter];

        [self addSubview:titleLabel];
        [titleLabel release];
    }

    // finally, put our label in original title view's state
    [titleLabel setText:title];
    [titleLabel setTextColor:titleColor];
    [titleLabel setShadowColor:titleShadowColor];

    // and return empty rect so that the original title view is hidden
    return CGRectZero;
}

ฉันได้ใช้เวลาและเขียนอีกเล็กน้อยเกี่ยวกับเรื่องนี้ที่นี่ ที่นั่นฉันยังชี้ทางแก้ปัญหาที่สั้นกว่าแม้ว่ามันจะไม่เหมาะกับทุกสถานการณ์และเกี่ยวข้องกับการแฮ็คข้อมูลส่วนตัวบางอย่าง นอกจากนี้คุณยังสามารถดาวน์โหลดคลาสย่อย UIButton ที่พร้อมใช้งาน


3

หากคุณใช้เลย์เอาต์อัตโนมัติบน iOS 6 คุณอาจต้องตั้งค่าpreferredMaxLayoutWidthคุณสมบัติ:

button.titleLabel.lineBreakMode = NSLineBreakByWordWrapping;
button.titleLabel.textAlignment = NSTextAlignmentCenter;
button.titleLabel.preferredMaxLayoutWidth = button.frame.size.width;

3

การตั้งค่า lineBreakMode เป็น NSLineBreakByWordWrapping (ทั้งใน IB หรือรหัส) ทำให้ป้ายชื่อปุ่มหลายบรรทัด แต่ไม่มีผลต่อเฟรมของปุ่ม

หากปุ่มมีหัวเรื่องแบบไดนามิกมีเคล็ดลับอย่างหนึ่งคือวาง UILabel ที่ซ่อนไว้ด้วยแบบอักษรเดียวกันและผูกความสูงกับความสูงของปุ่มด้วยเค้าโครง เมื่อตั้งค่าข้อความเป็นปุ่มและป้ายกำกับและการชำระอัตโนมัติจะทำให้การทำงานทั้งหมด

บันทึก

ความสูงขนาดที่แท้จริงของปุ่มหนึ่งบรรทัดนั้นใหญ่กว่าของฉลากดังนั้นเพื่อป้องกันไม่ให้ความสูงของฉลากลดลงความสำคัญของเนื้อหาในแนวตั้งจะต้องมากกว่าลำดับความต้านทานการบีบอัดเนื้อหาตามแนวตั้งของปุ่ม


3

ในSwift 5.0และXcode 10.2

//UIButton extension
extension UIButton {
     //UIButton properties
     func btnMultipleLines() {
         titleLabel?.numberOfLines = 0
         titleLabel?.lineBreakMode = .byWordWrapping
         titleLabel?.textAlignment = .center        
     }
}

ในการเรียกใช้ViewControllerของคุณเช่นนี้

button.btnMultipleLines()//This is your button

2

มันทำงานได้อย่างสมบูรณ์

เพิ่มเพื่อใช้สิ่งนี้กับไฟล์ปรับแต่งเช่น Plist คุณต้องใช้ CDATA เพื่อเขียนชื่อแบบหลายบรรทัดเช่นนี้:

<string><![CDATA[Line1
Line2]]></string>



2

ทุกวันนี้ถ้าคุณต้องการให้สิ่งเหล่านี้สามารถเข้าถึงได้ในตัวสร้างส่วนต่อประสานคุณสามารถทำได้ด้วยส่วนขยายแบบง่าย ๆ ดังนี้:

extension UIButton {
    @IBInspectable var numberOfLines: Int {
        get { return titleLabel?.numberOfLines ?? 1 }
        set { titleLabel?.numberOfLines = newValue }
    }
}

จากนั้นคุณสามารถตั้งค่า numberOfLines เป็นแอททริบิวต์บนคลาสย่อย UIButton หรือ UIButton ใด ๆ ราวกับว่าเป็นเลเบล เช่นเดียวกันกับโฮสต์ทั้งหมดของค่าที่ไม่สามารถเข้าถึงได้ปกติเช่นรัศมีมุมของเลเยอร์ของมุมมองหรือคุณลักษณะของเงาที่มันร่าย


2

Swift 5 สำหรับข้อความหลายบรรทัดใน UIButton

  let button = UIButton()
  button.titleLabel?.lineBreakMode = .byWordWrapping
  button.titleLabel?.textAlignment = .center
  button.titleLabel?.numberOfLines = 0 // for Multi line text

0

ม้วนคลาสปุ่มของคุณเอง มันเป็นทางออกที่ดีที่สุดในระยะยาว UIButton และคลาส UIKit อื่น ๆ นั้นมีข้อ จำกัด อย่างมากในวิธีที่คุณสามารถปรับแต่งได้


0
self.btnError.titleLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping

self.btnError.titleLabel?.textAlignment = .center

self.btnError.setTitle("Title", for: .normal)

0

ฉันรวมคำตอบของ jessecurryไว้ในSTAButtonซึ่งเป็นส่วนหนึ่งของSTAControls open source library ปัจจุบันฉันใช้ภายในหนึ่งในแอพที่ฉันกำลังพัฒนาและทำงานได้ตามความต้องการของฉัน อย่าลังเลที่จะเปิดปัญหาในการปรับปรุงหรือส่งคำขอดึง


0

หากต้องการแก้ไขระยะห่างของป้ายกำกับของปุ่มให้ตั้งค่า titleEdgeInsets และคุณสมบัติอื่น ๆก่อน setTitle:

    let set = UIButton()
    sut.titleLabel?.lineBreakMode = .byWordWrapping
    sut.titleLabel?.numberOfLines = 0
    sut.titleEdgeInsets = UIEdgeInsets(top: 10, left: 10, bottom: 20, right: 20)
    sut.setTitle("Dummy button with long long long long long long long long title", for: .normal)

PS ฉันทดสอบการตั้งค่า titleLabel? .textAlignment ไม่จำเป็นและชื่อเรื่องจะเรียง.naturalตาม


-4

แม้ว่าจะไม่เป็นไรที่จะเพิ่มมุมมองย่อยให้กับตัวควบคุม แต่ก็ไม่รับประกันว่ามันจะใช้งานได้จริงเพราะตัวควบคุมอาจไม่ได้คาดหวังว่ามันจะอยู่ที่นั่นและอาจทำงานได้ไม่ดี หากคุณสามารถออกไปได้เพียงเพิ่มป้ายกำกับเป็นมุมมองพี่น้องของปุ่มและตั้งค่ากรอบเพื่อให้ซ้อนทับปุ่ม ตราบใดที่ปุ่มตั้งค่าให้ปรากฏที่ด้านบนของปุ่มจะไม่มีสิ่งใดที่ปุ่มสามารถบดบังได้

ในคำอื่น ๆ :

[button.superview addSubview:myLabel];
myLabel.center = button.center;

2
กรุณาถ้าคุณแนะนำวิธีการที่น่าเกลียดอย่างน้อยอย่าทำผิดพลาดในตัวอย่างโค้ดของคุณ :) ป้ายกำกับไม่ควรอยู่ตรงกลางเหมือนกับปุ่มถ้าเป็นมุมมองย่อย ใช้ myLabel.frame = button.bounds; หรือ myLabel.center = cgPointMake (button.frame.size.with * 0.5, button.frame.size.height * 0.5)
JakubKnejzlik

1
@GrizzlyNetch ฉันแนะนำโดยเฉพาะว่าไม่ให้เพิ่มเป็นมุมมองย่อยของปุ่ม addSubview:ที่นี่เพิ่มเข้าไปในbuttonsuperview ของจึงทำให้มันเป็นพี่น้องของปุ่มเพื่อให้ตรงกับศูนย์กลางของพวกเขาถูกต้อง
Brent Royal-Gordon

ความผิดพลาดของฉัน! คุณพูดถูกฉันพลาดความจริง "เล็ก" ไปแล้วในการกำกับ: D ... ขออภัย :)
JakubKnejzlik

ไม่ใช่สิ่งที่ถูกถามอย่างแน่นอนวิธีนี้จะเป็นวิธีที่ไม่ดีในการนำคำถามมาใช้เนื่องจากปุ่มองค์ประกอบมีชื่อเรื่อง
Pablo Blanco

นี่เป็นคำแนะนำที่สมเหตุสมผลใน iPhone OS 2.0 ตอนนี้มีวิธีที่ดีกว่ามากในการทำ : ^)
Brent Royal-Gordon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.