ios - আপনি একটি UIButton মাল্টি লাইন টেক্সট যোগ করবেন না?




cocoa-touch uikit (16)

আমার নিম্নলিখিত কোড আছে ...

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

... ধারণাটি হচ্ছে যে আমি বোতামটির জন্য মাল্টি-লাইন পাঠ্য থাকতে পারি, তবে পাঠ্যটি সর্বদা পটভূমির দ্বারা লুকিয়ে থাকে UIIUTTON এর চিত্র। বোতামের সাবউইউগুলি দেখানোর জন্য একটি লগিং কল দেখায় যে UILabel যুক্ত হয়েছে, কিন্তু পাঠ্যটি নিজেই দেখা যাবে না। এই UI বাটন একটি বাগ বা আমি কিছু ভুল করছি?


সুইফ্ট 3

button.titleLabel?.lineBreakMode = .byWordWrapping
button.titleLabel?.textAlignment = .center  
button.setTitle("Button\nTitle",for: .normal)

Autolayout সঙ্গে iOS7 বাম সাইন ইন করুন:

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

আইওএস 6 এর জন্য:

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

যেমন

UILineBreakModeWordWrap and UITextAlignmentCenter

আইওএস 6 এর পরের সংস্করণে বাতিল করা হয়েছে ..


আজকাল, যদি আপনার ক্ষেত্রে এই ধরনের জিনিসটি ইন্টারফেস বিল্ডারের ক্ষেত্রে কেস-বাই-কেস ভিত্তিতে অ্যাক্সেসযোগ্য হওয়ার প্রয়োজন হয় তবে আপনি এটির মতো একটি সহজ এক্সটেনশন দিয়ে এটি করতে পারেন:

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

তারপরে আপনি কেবল কোনও UIButton বা UIButton উপশ্রেণী হিসাবে এটি লেবেল হিসাবে একটি গুণ হিসাবে নম্বরঅফাইনগুলি সেট করতে পারেন। একইভাবে অন্যান্য সাধারণ-প্রবেশযোগ্য মানগুলির পুরো হোস্টের জন্য, যেমন একটি দৃশ্যের স্তর কোণার ব্যাসার্ধ, বা এটি যে ছায়াটি ধারণ করে তার বৈশিষ্ট্যগুলি।


আপনার নিজের বাটন ক্লাস রোল। এটি দীর্ঘ রান মধ্যে সবচেয়ে ভাল সমাধান দ্বারা। UIButton এবং অন্যান্য UIKit ক্লাসগুলি আপনি কীভাবে তাদের কাস্টমাইজ করতে পারেন তাতে খুব সীমিত।


আপনি যদি iOS 6 এ স্বয়ংক্রিয়-বিন্যাস ব্যবহার করেন তবে আপনাকে preferredMaxLayoutWidth সম্পত্তি সেট করতে হবে:

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

আপনি স্বয়ংক্রিয় লেআউট ব্যবহার করেন।

button.titleLabel?.adjustsFontSizeToFitWidth = true
button.titleLabel?.numberOfLines = 2

আমি STABUTTON এর মধ্যে STAButton উত্তরটি অন্তর্ভুক্ত করেছি যা আমার STAControls ওপেন সোর্স লাইব্রেরির অংশ। আমি বর্তমানে এটির একটি অ্যাপ্লিকেশনের মধ্যে এটি ব্যবহার করি যা আমি উন্নয়নশীল এবং এটি আমার প্রয়োজনগুলির জন্য কাজ করে। কিভাবে এটি উন্নত বা আমাকে অনুরোধ pull পাঠাতে সমস্যা খুলতে দ্বিধা বোধ।


এক্সকোড 9.3 তে আপনি নীচের স্টোরিবোর্ড ব্যবহার করে এটি করতে পারেন,

আপনি বোতাম শিরোনাম পাঠ্য সেট alignment করতে হবে

button.titleLabel?.textAlignment = .center

আপনি নতুন লাইন (\ n) নীচের মত শিরোনাম পাঠ্য সেট করতে হবে না,

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

শুধু শিরোনাম সেট,

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

এখানে ফলাফল,


এখানে উত্তর আপনি প্রোগ্রামিলিকাল multiline বাটন শিরোনাম অর্জন কিভাবে বলুন।

আমি স্টোরিবোর্ডগুলি ব্যবহার করতে চাইলে এটি যোগ করতে চেয়েছিলাম, আপনি একটি বোতাম শিরোনাম ক্ষেত্রের উপর একটি নতুন লাইন জোর করার জন্য [Ctrl + Enter] টাইপ করতে পারেন।

আছে HTH


দ্রুত 4.0

btn.titleLabel?.lineBreakMode = .byWordWrapping
btn.titleLabel?.textAlignment = .center
btn.setTitle( "Line1\nLine2", for: .normal)

নির্বাচিত উত্তর সঠিক তবে ইন্টারফেস বিল্ডারে আপনি এই ধরণের জিনিসটি করতে পছন্দ করেন তবে আপনি এটি করতে পারেন:


যদিও নিয়ন্ত্রণে একটি সাবউইউ যুক্ত করা ঠিক আছে, তবে এটি কোনও গ্যারান্টি দেয় না যে এটি আসলে কাজ করবে, কারণ এটি নিয়ন্ত্রণে থাকার প্রত্যাশায় এটি প্রত্যাশা করে না এবং এভাবে এটি খারাপ আচরণ করতে পারে। যদি আপনি এটির সাথে সরে যেতে পারেন তবে বোতামটির ভাইবোন ভিউ হিসাবে লেবেল যুক্ত করুন এবং তার ফ্রেমটি সেট করুন যাতে এটি বোতামটি ওভারল্যাপ করে; যতক্ষণ এটি বোতামের শীর্ষে প্রদর্শিত হবে, ততক্ষণ বোতামটি যেকোন কিছুই অস্পষ্ট করবে না।

অন্য কথায়:

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

যারা Xcode 4 এর স্টোরিবোর্ড ব্যবহার করছেন তাদের জন্য, আপনি বাটনে ক্লিক করতে পারেন এবং ডান দিকের ইউটিলিটি ফলক এট্রিবিউটস ইন্সপেক্টরের অধীনে, আপনি লাইন ব্রেকের জন্য একটি বিকল্প দেখতে পাবেন। শব্দ মোড়ানো চয়ন করুন, এবং আপনি যেতে ভাল হতে হবে।


সর্বোপরি, আপনার অবগত হওয়া উচিত যে UIButton ইতিমধ্যে এটির মধ্যে একটি UILabel আছে। আপনি এটি সেট সেট করতে পারেন –setTitle:forState:

আপনার উদাহরণের সমস্যাটি হল যে আপনাকে UILabel এর numberOfLines সম্পত্তি 1 এর ডিফল্ট মান ব্যতীত অন্য কিছুতে সেট করতে হবে। আপনাকে লাইন numberOfLines সম্পত্তিটি পর্যালোচনা করতে হবে।


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

আইওএস 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. "লাইন ব্রেক" পপআপ নির্বাচন করুন "শব্দ মোড়ানো"




uikit