ইন্টারফেস বিল্ডার থেকে কি ইউআইভিউ সীমান্তের বৈশিষ্ট্য সেট করা সম্ভব?


184

ইন্টারফেস বিল্ডার থেকে সরাসরি ইউআইভিউ সীমানা বৈশিষ্ট্য (রঙ, বেধ, ইত্যাদি ...) নিয়ন্ত্রণ করা সম্ভব বা আমি কেবল এটি প্রোগ্রামিকভাবেই করতে পারি?



1
গুগল থেকে আমার মতো করে কেউ আসে সে ক্ষেত্রেই। এই পরিবর্তনগুলি আইবিতে প্রতিবিম্বিত হয় তা দেখতে আপনাকে কেবল ইউআইভিউর একটি সাবক্লাস তৈরি করতে হবে এবং আপনি আইবিতে যে কোনও দৃশ্যের সাথে ম্যানিপুলেট করতে চান তা নির্ধারণ করতে হবে।
কানঙ্গাতা

উত্তর:


393

আসলে আপনি ইন্টারফেস বিল্ডারের মাধ্যমে একটি ভিউ স্তরের কয়েকটি বৈশিষ্ট্য সেট করতে পারেন। আমি জানি যে আমি এক্সকোডের মাধ্যমে একটি স্তরের বর্ডারউইথ এবং কর্নার রেডিয়াস সেট করতে পারি। বর্ডার কালার কাজ করে না, সম্ভবত লেয়ারটি ইউআইক্লোরের পরিবর্তে সিজি কালার চায়।

আপনি সংখ্যার পরিবর্তে স্ট্রিংস ব্যবহার করতে পারেন, তবে এটি কার্যকর!

layer.cornerRadius
layer.borderWidth
layer.borderColor

আপডেট: স্তর.masksToBounds = সত্য

উদাহরণ

আপডেট: কীপথের জন্য উপযুক্ত প্রকারটি নির্বাচন করুন:

এখানে চিত্র বর্ণনা লিখুন


3
আপনার এবং পিটার ডিউইজের কাছে: আমি এক্সকোড ৪.6.৩ ব্যবহার করি এবং আমি কিপ্যাথ টাইপকে কালার ইন্টারফেস প্রয়োগ না করেই "রঙ" এ সেট করতে পারি

39
দুর্ভাগ্যক্রমে স্তর.বর্ডার কালার এইভাবে সেট করা যায় না। এটি একটি সিজি কালারআরফ, তবে আইবি রঙের মান প্রকারটি ইউআইসিওলর।
mrgrieves

12
সুতরাং এটি যা ব্যবহারকারী সংজ্ঞায়িত রানটাইম বৈশিষ্ট্যগুলি করে! হাহা, ২০১১ সাল থেকে আইওএসের জন্য লিখছেন এবং আমি কখনই শিখিনি যে এই ক্ষেত্রগুলি কী for এই দুর্দান্ত উত্তর জন্য ধন্যবাদ।
অ্যান্ডি ইবনেজ

3
দুর্দান্ত, তবে আপনাকে প্রতিটি সম্পত্তির জন্য সঠিক ধরণের সেট করতে হবে। উদাহরণস্বরূপ "লেয়ার.কর্নারারিয়াস" এর জন্য টাইপটি "স্ট্রিং" এর পরিবর্তে "নম্বর" এ সেট করতে হবে!
পিটার ক্রেইনজ

5
এছাড়াও, কোণার রেডিওতে কাজ করার জন্য "ক্লিপ টু বাউন্ডস" চেকবক্সটি ভুলবেন না।
পিয়েরে-অলিভিয়ের সিমোনার্ড

182

রিচ 86 মান এর উত্তর সঠিক, তবে আপনি প্রক্সি বৈশিষ্ট্য যেমন স্তর.বর্ডার কালার হিসাবে বিভাগগুলি ব্যবহার করতে পারেন can ( কনভেনশনাল সি কোকোপোড থেকে)

CALayer + + XibConfiguration.h:

#import <QuartzCore/QuartzCore.h>
#import <UIKit/UIKit.h>

@interface CALayer(XibConfiguration)

// This assigns a CGColor to borderColor.
@property(nonatomic, assign) UIColor* borderUIColor;

@end

CALayer + + XibConfiguration.m:

#import "CALayer+XibConfiguration.h"

@implementation CALayer(XibConfiguration)

-(void)setBorderUIColor:(UIColor*)color
{
    self.borderColor = color.CGColor;
}

-(UIColor*)borderUIColor
{
    return [UIColor colorWithCGColor:self.borderColor];
}

@end

ইন্টারফেস নির্মাতা

layer.borderUIColor

এক্সকোডে নয়, রানটাইমের সময় ফলাফলটি সুস্পষ্ট হবে।

সম্পাদনা : layer.borderWidthনির্বাচিত রঙের সীমানা দেখতে আপনাকে কমপক্ষে 1 এ সেটও করতে হবে।

সুইফট ২.০ এ:

extension CALayer {
    var borderUIColor: UIColor {
        set {
            self.borderColor = newValue.CGColor
        }

        get {
            return UIColor(CGColor: self.borderColor!)
        }
    }
}

সুইফটে 3.0:

extension CALayer {
    var borderUIColor: UIColor {
        set {
            self.borderColor = newValue.cgColor
        }

        get {
            return UIColor(cgColor: self.borderColor!)
        }
    }
}

আমার জন্য এটি কাজ করতে পারি না। .M ফাইলটি বর্ডার কালারের সীমানা ইউক্লোর থাকতে হবে এবং এটি ঠিক করার জন্য হাহাকার করে, এটি করার পরে এটি এখনও সতর্কতা দেখায় এবং সীমান্তের রঙ রানটাইমগুলিতে রেন্ডার হয় না। আমার যে বিটটি আলাদা তা হ'ল আমার কাছে ইমপ্লিমেন্টেশন নেমঅফফিল আছে, @ বাস্তবায়ন নেই ক্যালায়ার (নেমওফিল ফাইল), আমি কালায়ার অংশটি বুঝতে পারি না, আপনি কি আরও ব্যাখ্যা করতে পারতেন
ডেভ হাই হাই

2
@ পিটারডিউইজ দুর্দান্ত উত্তর! =)
সি-ভিলেন

1
আপনি আসলে বর্ডারউইথ সহ নম্বরটি ব্যবহার করতে পারেন এবং একটি এনএসএনবার গ্রহণ করতে পারেন। এটা ঠিক কাজ করে।
পিটার ডিউইজ

1
বর্ডারকালারের সমস্যা সমাধানের জন্য এটি আমার মতে অবশ্যই সেরা সমাধান। বিভাগগুলির দুর্দান্ত ব্যবহার!
এরিকওয়াসটাক

1
সুইফটে কাজ করেছেন!
KOTIOS

81

আইহুলকের একটির অনুরূপ উত্তর, তবে সুইফটে

আপনার প্রকল্পে ইউআইভিউ.উইফট নামের একটি ফাইল যুক্ত করুন (বা কেবল কোনও ফাইলটিতে এটি পেস্ট করুন):

import UIKit

@IBDesignable extension UIView {
    @IBInspectable var borderColor: UIColor? {
        set {
            layer.borderColor = newValue?.cgColor
        }
        get {
            guard let color = layer.borderColor else {
                return nil
            }
            return UIColor(cgColor: color)
        }
    }
    @IBInspectable var borderWidth: CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }
    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
}

তারপরে এটি ইউটিলিটিস প্যানেলে প্রতিটি বোতাম, চিত্রভিউ, লেবেল ইত্যাদির জন্য ইন্টারফেস বিল্ডারে উপলব্ধ হবে> বৈশিষ্ট্য পরিদর্শক:

বৈশিষ্ট্য পরিদর্শক

দ্রষ্টব্য: সীমান্তটি কেবল রানটাইমে উপস্থিত হবে।


@ গৌরব আপনি কি ত্রুটি দেখতে পাচ্ছেন? আপনি কোন উপাদানটিতে (ইউআইবাটন, ইউআইএলবেল ইত্যাদি) ব্যবহার করছেন?
অ্যাক্সেল গিলিন

আমি আপনাকে আরও বিশদ ছাড়াই সহায়তা করতে পারি না :(
এক্সেল গুইলমিন

2
আমি @IBDesignableএক্সটেনশনের শুরু থেকে অপসারণ না করা পর্যন্ত আমি এই পদ্ধতির সাথে ইন্টারফেস বিল্ডার ক্র্যাশ পেয়েছিলাম।
অ্যালবার্ট বোরি

1
এটা আশ্চর্যজনক ... ধন্যবাদ! আমি
এক্সকোড

1
খুব সহজ এবং ঝরঝরে! ধন্যবাদ!
কার্ল জন জন চৌ

56

আপনি ইউআইভিউয়ের একটি বিভাগ তৈরি করতে পারেন এবং এটি বিভাগের .h ফাইলটিতে যুক্ত করতে পারেন

@property (nonatomic) IBInspectable UIColor *borderColor;
@property (nonatomic) IBInspectable CGFloat borderWidth;
@property (nonatomic) IBInspectable CGFloat cornerRadius;

এখন এটি .m ফাইলে যুক্ত করুন

@dynamic borderColor,borderWidth,cornerRadius;

এবং এই হিসাবে ভাল। মি ফাইল

-(void)setBorderColor:(UIColor *)borderColor{
    [self.layer setBorderColor:borderColor.CGColor];
}

-(void)setBorderWidth:(CGFloat)borderWidth{
    [self.layer setBorderWidth:borderWidth];
}

-(void)setCornerRadius:(CGFloat)cornerRadius{
    [self.layer setCornerRadius:cornerRadius];
}

এখন আপনি এটি আপনার স্টুবোর্ডে সমস্ত ইউআইভিউ সাবক্লাসের জন্য দেখতে পাবেন (ইউআইএলবেল, ইউআইটিেক্সটফিল্ড, ইউআইআইমেজভিউ ইত্যাদি)

এখানে চিত্র বর্ণনা লিখুন

এটি .. .. কোথাও বিভাগ আমদানি করার দরকার নেই, কেবল প্রকল্পের বিভাগের ফাইলগুলি যুক্ত করুন এবং স্টোরিবোর্ডে এই বৈশিষ্ট্যগুলি দেখুন।


2
আইআর আপনার ড্রয়াকরেক্টটি ব্যবহার করে আপনার কাস্টম ভিউটি পুনরায় আঁকতে আইবি_ডিজিইনবলের সাথে পরিপূরক করুন: পদ্ধতি বিকাশকারী.অ্যাপল
txulu

3
এখানেই খুব ভালো, আপনি ইন্টারফেস লাইন সামনে জ ফাইলের মধ্যে IB_DESIGNABLE লেখেন, তাহলে আপনার প্রয়োজন .m মধ্যে @dynamic লাইন যোগ করার জন্য আত
Jasmeet

@ ব্যবহারকারী 1618612 এর রেজোলিউশনের সাথে কিছু করার নেই, এটি কেবলমাত্র সাধারণ স্তর বৈশিষ্ট্য নির্ধারণ করছে।
iHulk

11

জন্য সুইফট 3 এবং 4 , যদি আপনি ব্যবহার সম্মত হন IBInspectableগুলি, এই আছে:

@IBDesignable extension UIView {
    @IBInspectable var borderColor:UIColor? {
        set {
            layer.borderColor = newValue!.cgColor
        }
        get {
            if let color = layer.borderColor {
                return UIColor(cgColor: color)
            }
            else {
                return nil
            }
        }
    }
    @IBInspectable var borderWidth:CGFloat {
        set {
            layer.borderWidth = newValue
        }
        get {
            return layer.borderWidth
        }
    }
    @IBInspectable var cornerRadius:CGFloat {
        set {
            layer.cornerRadius = newValue
            clipsToBounds = newValue > 0
        }
        get {
            return layer.cornerRadius
        }
    }
}

এটি আমার জন্য একটি সেরা সমাধান
ম্যাক Đồng

দুর্দান্ত সমাধান, আপনাকে ধন্যবাদ
Ebtehal___

7

যদিও এটি বৈশিষ্ট্যগুলি নির্ধারণ করতে পারে, এটি আসলে আইবিতে প্রতিফলিত হয় না। সুতরাং আপনি যদি আইবিতে মূলত কোড লিখছেন তবে আপনি আপনার উত্স কোডে এটি করতে পারেন


1
এমভিসি তে আপনাকে স্বাগতম! আপনি বৈশিষ্ট্য কোড কখনও না হওয়া উচিত দেখুন !
আলেজান্দ্রো ইভান

2
M এমভিসি এটি নয়।
অ্যান্ড্রু প্লামার

1
এই কোডটি নিয়ন্ত্রকের মধ্যে 95% সময় চলে যাওয়ার বিষয়টি বিবেচনা করে এটি এমভিসিও হয় অবশ্যই আপনার যথাযথভাবে সাবক্লাস করা উচিত বা আপনার দৃষ্টিভঙ্গিটি প্রসারিত করা উচিত তারপরে কোডিংয়ের পরে তার ঠিক কনফিগারেশন :-)
ড্যানিয়েল বার্নার্ডিনী

4

আপনি যদি সময় বাঁচাতে চান তবে UIViewsএকে অপরের উপরে কেবল দুটি ব্যবহার করুন, এর পিছনে একটি সীমানা রঙ এবং সামনের দিকে একটি সীমান্ত প্রভাব প্রদান করুন। আমি মনে করি না এটি হয় একটি মার্জিত সমাধান, তবে অ্যাপল যদি আরও একটু যত্ন করে তবে আপনার এটি করা উচিত নয়।


10
কর্মক্ষেত্রগুলি এখন সময় সাশ্রয় করে এবং ভবিষ্যতে আরও অনেক সময় নষ্ট করে।
লাচেজার তোদোরভ

0

এটি একেবারেই সম্ভব তখনই যখন আপনি সেট করেন layer.masksToBounds = trueএবং আপনি জিনিসগুলি বিশ্রাম করেন।


-1

এখানে সমস্ত সমাধানের চেষ্টা করার পরেও স্টোরিবোর্ড আমার জন্য সারাক্ষণ কাজ করে না

সুতরাং সর্বদা নিখুঁত উত্তরটি কোডটি ব্যবহার করা হয়, কেবলমাত্র ইউআইভিউয়ের আইবিউটলেট উদাহরণ তৈরি করুন এবং বৈশিষ্ট্য যুক্ত করুন

সংক্ষিপ্ত উত্তর :

layer.cornerRadius = 10
layer.borderWidth = 1
layer.borderColor = UIColor.blue.cgColor

দীর্ঘ উত্তর :

ইউআইভিউ / ইউআইবাটন ইত্যাদি গোলাকার কোণে

customUIView.layer.cornerRadius = 10

সীমান্ত বেধ

pcustomUIView.layer.borderWidth = 2

সীমান্ত রঙ

customUIView.layer.borderColor = UIColor.blue.cgColor

প্রশ্নটি খুব সুনির্দিষ্ট এবং ইন্টারফেস বিল্ডারের কাছ থেকে এটি কীভাবে করবেন তা জিজ্ঞাসা করুন। আপনার উত্তরটি অপ্রাসঙ্গিক।
Shinnyx

-5

এই 2 টি সাধারণ লাইন কোড যুক্ত করুন:

self.YourViewName.layer.cornerRadius = 15
self.YourViewName.layer.masksToBounds = true

এটা ঠিক কাজ করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.