একটি ইউআইটিুলবারে একটি বাম-তীর বোতাম (যেমন ইউআইএনএভিগেশনবারের "পিছনে" স্টাইল) তৈরি করা হচ্ছে


290

আমি একটিতে "পিছনে" বাম-তীর-বেজেল বোতামটি তৈরি করতে পছন্দ করব UIToolbar

আমি যতদূর বলতে পারি, এর মধ্যে একটি পাওয়ার একমাত্র উপায় হ'ল UINavigationControllerডিফল্ট সেটিংসে ছেড়ে যাওয়া এবং এটি বাম বার আইটেমের জন্য একটি ব্যবহার করে। তবে এটিকে একটি হিসাবে তৈরি করার মতো কোনও উপায় আমি খুঁজে পাচ্ছি না UIBarButtonItem, সুতরাং UIToolbarতারা স্ট্যান্ডার্ডের সাথে সাদৃশ্য থাকা সত্ত্বেও আমি একটি স্ট্যান্ডার্ডে এটি তৈরি করতে পারি না UINavigationBar

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

আমি ব্যবহার করতে চাইছি প্রতিটি আকার এবং রঙীন স্কিমের জন্য স্ক্রিনশটিং এর বাইরে কোনও ধারণা?

আপডেট: দয়া করে প্রশ্নটি ডডিং করুন এবং পরামর্শ দিন যে আমি এটি জিজ্ঞাসা করব না এবং ব্যবহার করা উচিত UINavigationBar। আমার অ্যাপ্লিকেশনটি ইনস্টাপের প্রো। এটি কেবল নীচের একটি সরঞ্জামদণ্ড দেখায় (স্থান বাঁচাতে এবং পাঠযোগ্য সামগ্রীর ক্ষেত্র সর্বাধিক করতে) এবং আমি নীচে একটি বাম-তীর-আকারের পিছনের বোতামটি রাখতে চাই।

আমাকে বলার যে আমার এটি করার দরকার নেই তা উত্তর নয় এবং অবশ্যই কোনও অনুগ্রহের যোগ্য নয়।



@ অ্যাক্সেসড থেকে: github.com/0xced/UIKit-
rptwsthi

উত্তর:


130

আমি নিম্নলিখিত পিএসডিটি ব্যবহার করেছি যা আমি http://www.teehanlax.com/blog/?p=447 থেকে উদ্ভূত করেছি

http://www.chrisandtennille.com/pictures/backbutton.psd

আমি তখনই একটি কাস্টম ইউআইভিউ তৈরি করেছি যা আমি সরঞ্জামদণ্ড আইটেমের কাস্টমভিউ বৈশিষ্ট্যে ব্যবহার করি।

আমার জন্য ভাল কাজ করে।


সম্পাদনা করুন: প্রেরিহিপ্পোর নির্দেশিত হিসাবে , ম্যারাবজো দেখতে পেয়েছেন যে নিম্নলিখিতটি ব্যবহার করে সাধারণ কোডটি কৌশলটি করেছে (বান্ডলে কাস্টম চিত্রের প্রয়োজন) এই উত্তরের সাথে একত্রিত হওয়া উচিত। সুতরাং এখানে অতিরিক্ত কোড:

// Creates a back button instead of default behaviour (displaying title of previous screen)
UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(backAction)];

tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
[backButton release];

1
আমি যে পিএসডি আপলোড করেছি তা একটি কালো টুলবারের জন্য। আমার অ্যাপ্লিকেশনটি এটি ব্যবহার না করায় আমি নীল রঙগুলির সাথে খুব বেশি চেষ্টা করি নি। তবে আমি যা জানি তা থেকে সরঞ্জাম বারটি এটি প্রয়োজনীয়ভাবে পুনরায় রঙ করবে না। ক্রিস।
পাইজামসাম

1
এটিকে পুনরায় রঙ করার জন্য আপনার কোনও বিশেষ সরঞ্জামের দরকার নেই, আমি ম্যাক প্রিভিউয়ের 'অ্যাডজাস্ট কালার' বিকল্পটি ব্যবহার করে এটি করেছি।
সুশান্ত

1
এই সমাধানটি কি কিছুটা বানান করা যায়?
ক্যানিবয়

4
এই পিএসডিটি কেবলমাত্র 1.0f স্ক্রিন স্কেলের জন্য দরকারী। একটি রেটিনা ডিসপ্লেতে এটি ভয়ঙ্কর দেখাচ্ছে।
ড্যানিয়েল উড

3
এর জন্য চিত্রগুলি ব্যবহার করবেন না, কেবল এটি সঠিকভাবে করুন ( স্ট্যাকওভারফ্লো / প্রশ্নগুলি / 4260238 এর উত্তর দেখুন )।
ingh.am

45

ইউনিকোড পদ্ধতি

আমি মনে করি কাজটি শেষ করার জন্য একটি ইউনিকোড চরিত্রটি ব্যবহার করা আরও সহজ। আপনি ইউনিকোড ত্রিভুজ বা ইউনিকোড তীরগুলি গুগল করে তীরগুলি দেখতে পারেন । আইওএস 6 দিয়ে শুরু করে অ্যাপল চরিত্রটিকে একটি সীমানার সাথে ইমোজি চরিত্র হিসাবে পরিবর্তন করেছে। সীমানাটি অক্ষম করতে আমি 0xFE0E ইউনিকোড ভেরিয়েশন নির্বাচনকারী যুক্ত করি

NSString *backArrowString = @"\U000025C0\U0000FE0E"; //BLACK LEFT-POINTING TRIANGLE PLUS VARIATION SELECTOR

UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:backArrowString style:UIBarButtonItemStylePlain target:nil action:nil];
self.navigationItem.leftButtonItem = backBarButtonItem;

কোড ব্লকটি কেবল ডেমোর জন্য। এটি কোনও এনএসএসস্ট্রিং গ্রহণ করে এমন কোনও বোতামে কাজ করবে।

অক্ষরের পুরো তালিকার জন্য ইউনিকোড চরিত্রের জন্য গুগল অনুসন্ধান করুন এবং আপনি কী চান। এখানে ব্ল্যাক বাম-পয়েন্টিং ত্রিভুজটির প্রবেশ রয়েছে

ফলাফল

ফলাফল


37

সতর্কতা: এমন প্রতিবেদন রয়েছে যে এটি আইওএস 6 এ কাজ করবে না এটি কেবল ওএস এর পুরানো সংস্করণে কাজ করতে পারে। স্পষ্টতই কমপক্ষে একটি দেব তাদের অ্যাপটি এই কৌশলটি ব্যবহার করার জন্য প্রত্যাখ্যান করেছে (মন্তব্যগুলি দেখুন)। আপনার নিজের ঝুঁকিতে ব্যবহার করুন। কোনও চিত্র ব্যবহার (উপরের উত্তর দেখুন) একটি নিরাপদ সমাধান হতে পারে।

সঠিক আকৃতি পেতে sekr1t বাটন টাইপ 101 ব্যবহার করে নিজের ইমেজ ফাইলগুলি যুক্ত না করে এটি করা যায়। আমার জন্য কৌতুকটি নির্ধারণ করছিল যে আমি initWithCustomViewএটি তৈরি করতে ব্যবহার করতে পারি BarButtonItem। আমি ব্যক্তিগতভাবে toolbarএটির পরিবর্তে ডায়নামিক নাবারের জন্য প্রয়োজন , তবে আমি এটি একটি সরঞ্জামদণ্ড দিয়ে পরীক্ষা করেছি এবং কোডটি প্রায় একই রকম:

// create button
UIButton* backButton = [UIButton buttonWithType:101]; // left-pointing shape!
[backButton addTarget:self action:@selector(backAction) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];

// create button item -- possible because UIButton subclasses UIView!
UIBarButtonItem* backItem = [[UIBarButtonItem alloc] initWithCustomView:backButton];

// add to toolbar, or to a navbar (you should only have one of these!)
[toolbar setItems:[NSArray arrayWithObject:backItem]];
navItem.leftBarButtonItem = backItem;

আপনি যদি কোনও সরঞ্জামদণ্ডে এটি করছেন তবে আপনি কীভাবে আইটেমগুলি সেট করবেন তা টুইঙ্ক করতে হবে, তবে এটি আপনার কোডের বাকী উপর নির্ভর করে এবং আমি এটিকে পাঠকের অনুশীলন হিসাবে ছেড়ে চলেছি। : পি এই নমুনাটি আমার জন্য কাজ করেছিল (সংকলিত ও চালিত)।

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


1
101 বোতামের ধরণটি আমাকে বাম-নির্দেশিত আকার দেবে না বলে মনে হচ্ছে ... কেবল একটি আয়তক্ষেত্র।
elsurudo

10
এটি করবেন না - আপনার অ্যাপ্লিকেশনটি প্রত্যাখাত হবে। এই উত্তরটি ভোট দিন।
thefaj

4
আমি মনে করি যে তিনি নিশ্চিত নন; তিনি বলছেন যে "Undocumented API ব্যবহার করবেন না" তবে তার অ্যাপ্লিকেশনটি প্রত্যাখ্যান করা হয়েছে উল্লেখ করে। এবং এটি একটি অনির্ধারিত এপিআই নয় - এটি একটি অনিবন্ধিত মান। কেউ যদি করেছে ছিল তাদের অ্যাপ নাকচ করে পোস্ট করুন। আমি এই মান সহ অ্যাপ্লিকেশনগুলি অনুমোদন পেতে অবিরত করেছি।
অ্যান্ড্রুস

1
@ থেফাজ আমি এতে এই কোড সহ একটি অ্যাপ্লিকেশন জমা দিয়েছি এবং এটি অনুমোদিত হয়েছে।
হারুন

1
এটি অত্যন্ত দুষ্ট কোডিং শৈলী। আপনি ভাগ্যবান, তবে আপনার কেবল ডকুমেন্টেড এপিআই (ম্যাজিক / অপ্রকাশিত সংখ্যা নয়) ব্যবহার করতে হবে।
thefaj

36

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

সবার আগে আপনাকে পিছনের বোতামটির একটি চিত্র খুঁজে বের করতে হবে। আমি এক্সট্র্যাক্টর নামে একটি দুর্দান্ত অ্যাপ্লিকেশন ব্যবহার করেছি যা আইফোন থেকে সমস্ত গ্রাফিকগুলি বের করে। ইন সহ iOS7 আমি ইমেজ নামক পুনরুদ্ধার করতে পরিচালিত UINavigationBarBackIndicatorDefaultএবং এটি কালো রঙের ছিল, যেহেতু আমি একটি লাল আভা প্রয়োজন আমি লাল গিম্প ব্যবহার করে রং পরিবর্তন।

সম্পাদনা করুন:

যেমনটি বিটেট তাঁর মন্তব্যে উল্লেখ করেছেন , চিত্র সম্পাদকের সাথে রঙ পরিবর্তন করার দরকার নেই। নিম্নলিখিত কোডটি কৌশলটি করা উচিত:

imageView.tint = [UIColor redColor];
imageView.image = [[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"] imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];

তারপরে আমি এমন একটি ভিউ তৈরি করেছি যাতে সেই তীর সহ একটি চিত্র ভিউ রয়েছে, কাস্টম পাঠ্য সহ একটি লেবেল এবং দৃশ্যের উপরে আমার একটি ক্রিয়া সহ একটি বোতাম আছে। তারপরে আমি একটি সাধারণ অ্যানিমেশন যুক্ত করেছি (বিবর্ণ এবং অনুবাদ)।

নিম্নলিখিত কোডটি অ্যানিমেশন সহ পিছনের বোতামের আচরণ অনুকরণ করে।

-(void)viewWillAppear:(BOOL)animated{
        UIImageView *imageView=[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"UINavigationBarBackIndicatorDefault"]];
        [imageView setTintColor:[UIColor redColor]];
        UILabel *label=[[UILabel alloc] init];
        [label setTextColor:[UIColor redColor]];
        [label setText:@"Blog"];
        [label sizeToFit];

        int space=6;
        label.frame=CGRectMake(imageView.frame.origin.x+imageView.frame.size.width+space, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
        UIView *view=[[UIView alloc] initWithFrame:CGRectMake(0, 0, label.frame.size.width+imageView.frame.size.width+space, imageView.frame.size.height)];

        view.bounds=CGRectMake(view.bounds.origin.x+8, view.bounds.origin.y-1, view.bounds.size.width, view.bounds.size.height);
        [view addSubview:imageView];
        [view addSubview:label];

        UIButton *button=[[UIButton alloc] initWithFrame:view.frame];
        [button addTarget:self action:@selector(handleBack:) forControlEvents:UIControlEventTouchUpInside];
        [view addSubview:button];

        [UIView animateWithDuration:0.33 delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
            label.alpha = 0.0;
            CGRect orig=label.frame;
            label.frame=CGRectMake(label.frame.origin.x+25, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
            label.alpha = 1.0;
            label.frame=orig;
        } completion:nil];

        UIBarButtonItem *backButton =[[UIBarButtonItem alloc] initWithCustomView:view];
}

- (void) handleBack:(id)sender{
}

সম্পাদনা করুন:

বোতামটি যুক্ত করার পরিবর্তে, আমার মতে কোনও অঙ্গভঙ্গি শনাক্তকারী ব্যবহার করা ভাল approach

UITapGestureRecognizer* tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleBack:)];
[view addGestureRecognizer:tap];
[view setUserInteractionEnabled:YES];

1
হাই অ্যালেক্স, সমাধানের জন্য ধন্যবাদ। এই বাস্তবায়িত সমাধানটির সাথে আমি যে সমস্যার মুখোমুখি হচ্ছি তা হ'ল: হিট এরিয়া কম হ'ল যখন আমি তীরটিতে ক্লিক করি তখন হ্যান্ডেলব্যাক কলটি পায় না তবে আমি যখন পাঠ্য হ্যান্ডেলব্যাকের কলটিতে ক্লিক করি। এই সম্পর্কে পরামর্শ দিন। আপনাকে ধন্যবাদ
যোগেশ ললুশারে

UITapGestureRecognizer ব্যবহার করার চেষ্টা করুন আমি প্রশ্নটি সম্পাদনা করেছি
আলেক্সি

সম্ভবত আপনি দর্শনটির আকার বাড়াতেও চেষ্টা করতে পারেন।
আলেক্সি

2
এই বোতামের কালো রঙ এটিকে একটি টেম্পলেট তৈরি করে। এটি পরিবর্তন করার জন্য আপনার জিম্প ব্যবহার করার দরকার নেই। imageView.tint = [UIColor redColor]চিত্রটিতে কেবল রঙিন এবং টেম্পলেট রেন্ডারিং মোড ব্যবহার করুন। imageView.image = [yourImage imageWithRenderingMode:UIImageRenderingModeAlwaysTemplate];
ধূমপায়ীয়েস্টার

18

এটি কাজ করে কিনা তা সম্পর্কে আমি নিশ্চিত নই, তবে আপনি UINavigationControllerবোতামটি তৈরি করতে ডিফল্ট সেটিংসের সাহায্যে একটি নেভিগেশন কন্ট্রোলারের সাবভিউ হায়ারার্কিতে বোতামটি খুঁজে পেতে, এটিতে কল removeFromSuperviewকরতে, নেভিগেশন নিয়ামকটিকে ধ্বংস করতে এবং তারপরে বোতামটি যুক্ত করতে চেষ্টা করতে পারেন আপনার সরঞ্জামদণ্ডের একটি সংক্ষিপ্তসার। এছাড়াও আপনি করার প্রয়োজন হতে পারে retainকল করার আগে এবং বাটন removeFromSuperview(এবং তারপর releaseএটা প্রক্রিয়ার সময় deallocated হচ্ছে এড়াতে আপনার টুলবার subview যেমন যোগ করার পরে এটা)।


14

আইওএস 7 সিস্টেমের পিছনের তীরটির কাছে খুব কাছাকাছি একটি তীর দিয়ে একটি ইউআইবাটন তৈরি করতে (আমি কোনও ডিজাইনার নই;):

মান:

স্ট্যান্ডার্ড সিস্টেমের পিছনে তীর

অ্যাপল এসডি গথিক নিও

অ্যাপল এসডি গথিক নিও <চরিত্র

এক্সকোডে:

  • বোতামের শিরোনাম মান ক্ষেত্রের উপর ফোকাস করুন (বা পাঠ্যের সামগ্রীর সাথে অন্য কোনও দৃশ্য / নিয়ন্ত্রণ)
  • সম্পাদনা খুলুন -> বিশেষ অক্ষর
  • প্যারেন্টেসিস গ্রুপটি নির্বাচন করুন এবং '<' অক্ষরটিতে ডাবল ক্লিক করুন
  • ফন্টটি এতে পরিবর্তন করুন: অ্যাপল এসডি গথিক নিও, কাঙ্ক্ষিত আকারের সাথে নিয়মিত (যেমন 20)
  • আপনার পছন্দ মতো রঙ পরিবর্তন করুন

রেফ @ স্ট্যাটিকভিডম্যানের আইওএস 7 এ ব্যাক-এর মতো তীরটির উত্তর


8

পিছনের তীর

আপনি যদি চিত্রের ফাইলগুলি নিয়ে বিরক্ত করতে না চান তবে তীরের আকারটি নিম্নলিখিত কোড সহ একটি ইউআইভিউ সাবক্লাসে আঁকতে পারে:

- (void)drawRect:(CGRect)rect {
    float width = rect.size.width;
    float height = rect.size.height;
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextBeginPath(context);
    CGContextMoveToPoint(context, width * 5.0/6.0, height * 0.0/10.0);
    CGContextAddLineToPoint(context, width * 0.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 5.0/6.0, height * 10.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 9.0/10.0);
    CGContextAddLineToPoint(context, width * 2.0/6.0, height * 5.0/10.0);
    CGContextAddLineToPoint(context, width * 6.0/6.0, height * 1.0/10.0);
    CGContextClosePath(context);

    CGContextSetFillColorWithColor(context, [UIColor blackColor].CGColor);
    CGContextFillPath(context);
}

যেখানে তীর দৃশ্যটি 6.0 প্রস্থ এবং 10.0 উচ্চতার সমানুপাতিক


7
    self.navigationItem.leftBarButtonItem = self.navigationItem.backBarButtonItem;

আমার জন্য কাজ কর. আমি এটি ব্যবহার করেছি যখন আমার আরও ট্যাব ছিল তারপরে ট্যাব বারে ফিট করতে পারে এবং একটি ভিউ কন্ট্রোলার "মোর" থেকে চাপানো বামবার্ট বাটন আইটেমটিকে তার ভিডডিডঅডে ওভাররড করে।


4

আপনি উত্স চিত্রগুলি UIKit {{SDKROOT} / সিস্টেম / লাইব্রেরি / ফ্রেমওয়ার্কস / ইউআইকিট.ফ্রেমওয়ার্ক / আউট.আর্ট ওয়ার্কে অন্যান্য.আর্টওয়ার্ক থেকে এটিকে বের করে খুঁজে পেতে পারেন। মডিং সম্প্রদায় তাদের আহরণ জন্য কিছু টুলস রয়েছে এখানে । আপনি একবার চিত্রটি বের করে আনতে গেলে প্রয়োজনীয় হিসাবে পুনরায় রঙ করতে কিছু কোড লিখতে পারেন এবং এটিকে বোতামের চিত্র হিসাবে সেট করতে পারেন। আপনি আসলে এই জাতীয় জিনিসটি চালিয়ে যেতে পারেন কি না (যেহেতু আপনি উত্পন্ন শিল্পকর্মটি এম্বেড করছেন) কিছুটা দ্বৈত হতে পারে, তাই আপনি কোনও আইনজীবীর সাথে কথা বলতে চান।


4

থ্রি 20 লাইব্রেরির এটি করার একটি উপায় রয়েছে:

  UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle: @"Title" style:UIBarButtonItemStylePlain 
                                                                target:self action:@selector(foo)];

  UIColor* darkBlue = RGBCOLOR(109, 132, 162);

  TTShapeStyle* style = [TTShapeStyle styleWithShape:[TTRoundedLeftArrowShape shapeWithRadius:4.5] next:
    [TTShadowStyle styleWithColor:RGBCOLOR(255,255,255) blur:1 offset:CGSizeMake(0, 1) next:
    [TTReflectiveFillStyle styleWithColor:darkBlue next:
    [TTBevelBorderStyle styleWithHighlight:[darkBlue shadow]
                                     shadow:[darkBlue multiplyHue:1 saturation:0.5 value:0.5]
                                      width:1 lightSource:270 next:
    [TTInsetStyle styleWithInset:UIEdgeInsetsMake(0, -1, 0, -1) next:
    [TTBevelBorderStyle styleWithHighlight:nil shadow:RGBACOLOR(0,0,0,0.15)
                                        width:1 lightSource:270 next:nil]]]]]];

  TTView* view = [[[TTView alloc] initWithFrame:CGRectMake(0, 0, 80, 35)] autorelease];
  view.backgroundColor = [UIColor clearColor];
  view.style = style;
  backButton.customView = view;


  self.navigationItem.leftBarButtonItem = backButton;

আপনি কি চূড়ান্ত ফলাফলের একটি স্ক্রিনশট পোস্ট করতে পারেন?
জেএম

1
এটা ভয়ানক লাগছিল। একদম ডানদিকে দেখতে বাম তীরের পিছনের বোতামটি কখনও পান নি। আমি ছেড়ে দিয়েছিলাম এবং থ্রি 20 নেভিগেটরটির সাথে একটি সঠিক ব্যাক বোতাম ব্যবহার করেছি।
অ্যান্ড্রু অ্যারো

4

আমি দেখতে পেয়েছি যে নিম্নলিখিত, সাধারণ কোডটি ব্যবহার করে কৌশলটি করা হয়েছে (বান্ডেলে কাস্টম চিত্রের প্রয়োজন):

// Creates a back button instead of default behaviour (displaying title of previous screen)
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithImage:[UIImage imageNamed:@"back_arrow.png"]
                                                                   style:UIBarButtonItemStyleBordered
                                                                  target:self
                                                                  action:@selector(backAction)];

    tipsDetailViewController.navigationItem.leftBarButtonItem = backButton;
    [backButton release];

2
এই পৃষ্ঠায় যে কেউ আসার জন্য, এই উত্তরটি @ পাইজামসামের উত্তরের সাথে সংযুক্ত করুন।
প্রাইরিহিপ্পো

@ প্রাইরি হিপ্পো: এখনই হয়ে গেছে। সম্ভবত প্রথম জায়গায় সম্পাদনা করা উচিত ছিল। এটি না করার জন্য আদর্শ -1 প্রথমে অন্যের জন্য কাজটি রেখে।
hakre

4

এই সমস্ত সমাধানগুলি এবং অন্যদের অনুসন্ধান করার পরে আমি এখানে কী শেষ করেছি। এটি UIKit স্টক ইমেজগুলি থেকে নেওয়া একটি প্রসারিত png এর ব্যবহার করে। এইভাবে আপনি যা খুশি তাই পাঠ্যটি সেট করতে পারেন

// Generate the background images
UIImage *stretchableBackButton = [[UIImage imageNamed:@"UINavigationBarDefaultBack.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];
UIImage *stretchableBackButtonPressed = [[UIImage imageNamed:@"UINavigationBarDefaultBackPressed.png"] stretchableImageWithLeftCapWidth:13 topCapHeight:0];
// Setup the UIButton
UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom];
[backButton setBackgroundImage:stretchableBackButton forState:UIControlStateNormal];
[backButton setBackgroundImage:stretchableBackButtonPressed forState:UIControlStateSelected];
NSString *buttonTitle = NSLocalizedString(@"Back", @"Back");
[backButton setTitle:buttonTitle forState:UIControlStateNormal];
[backButton setTitle:buttonTitle forState:UIControlStateSelected];
backButton.titleEdgeInsets = UIEdgeInsetsMake(0, 5, 2, 1); // Tweak the text position
NSInteger width = ([backButton.titleLabel.text sizeWithFont:backButton.titleLabel.font].width + backButton.titleEdgeInsets.right +backButton.titleEdgeInsets.left);
[backButton setFrame:CGRectMake(0, 0, width, 29)];
backButton.titleLabel.font = [UIFont boldSystemFontOfSize:13.0f];
[backButton addTarget:self action:@selector(yourSelector:) forControlEvents:UIControlEventTouchDown];
// Now add the button as a custom UIBarButtonItem
UIBarButtonItem *backButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:backButton] autorelease];
self.navigationItem.leftBarButtonItem = backButtonItem;

2
ইউআইসিএন্ট্রোলস্টেট হাইলাইটেড ইউআইসিএন্ট্রোলস্টেট নির্বাচন করা উচিত নয় অন্যথায় বোতামটি স্পর্শ করলে চিত্রটি অদলবদল করে।
জিম

4

এক্সকোড 5.xইন্টারফেস বিল্ডারের সাথে কাজ করা সহজ

ফলাফল

  • অবজেক্ট লাইব্রেরি থেকে সরঞ্জামদণ্ড এবং বার বোতাম আইটেম ব্যবহার করুন

    উপাদান

  • আপনার পিছনের বোতামের চিত্রের সাথে বাটনের বৈশিষ্ট্য পরিদর্শক সম্পাদনা চিত্র বিভাগে

    গুণ পরিদর্শক

সম্পন্ন!


2

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

তবে আমি এটিকে ঘিরে কাজ করার একটি উপায় খুঁজে পেয়েছি। আমি আসলে সবেমাত্র একটি ইউআইভিউউটি ইউআইবাটনের নীচে রেখেছি এবং ইউআইবারবারটন আইটেমের জন্য কাস্টমভিউ সেট করেছি। কোডটি এখানে, যদি কারওর প্রয়োজন হয়:

// initialize button and button view
UIButton *backButton = [UIButton buttonWithType:101];
UIView *backButtonView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, backButton.frame.size.width, backButton.frame.size.height)];

[backButton addTarget:self action:@selector(backButtonTouched:) forControlEvents:UIControlEventTouchUpInside];
[backButton setTitle:@"Back" forState:UIControlStateNormal];
[backButtonView addSubview:backButton];

// set buttonview as custom view for bar button item
UIBarButtonItem *backButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButtonView];
self.navigationItem.leftBarButtonItem = backButtonItem;

// push item to navigationbar items
[self.navigationController.navigationBar setItems:[NSArray arrayWithObject:backButtonItem]];

1

ইউআইটিুলবারের জন্য একটি চিত্র তৈরি করতে, ফটোশপটিতে একটি পিএনজি তৈরি করুন এবং যেখানেই যে কোনও রঙ থাকে যেখানে এটি সাদা রাখে এবং যেখানে এটি আলফা = 0 থাকে তবে এটি একে একে ছেড়ে যায়।

এসডিকে আসলে আপনার তৈরি আইকনটির চারপাশে সীমানা রেখে দেয় এবং আপনাকে কিছু না করেই সাদা করে তোলে।

দেখুন, আমি আমার ফরোয়ার্ড বোতামের জন্য ফটোশপটিতে এটি তৈরি করেছি (স্পষ্টতই এটি পিছনের বোতামের জন্য অদলবদল করুন):

http://twitpic.com/1oanv

এবং এটি ইন্টারফেস বিল্ডারের মতো প্রদর্শিত হয়েছিল

http://twitpic.com/1oaoa


1

পিএনজি ব্যবহার না করে সমাধান করুন। এই এসও উত্তরের ভিত্তিতে: একটি আইফোন টেবিলভিউ সেলে একটি ঘরের ডানদিকে ছোট তীর যুক্ত করা

অনুভূমিকভাবে কেবল ইউআইটিএবলভিউসেলকে উল্টানো!

UIButton *btnBack = [[UIButton alloc] initWithFrame:CGRectMake(0, 5, 70, 20)];

// Add the disclosure
CGRect frm;
UITableViewCell *disclosure = [[UITableViewCell alloc] init];
disclosure.transform = CGAffineTransformScale(CGAffineTransformIdentity, -1, 1);
frm = self.btnBack.bounds;
disclosure.frame = CGRectMake(frm.origin.x, frm.origin.y, frm.size.width-25, frm.size.height);
disclosure.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
disclosure.userInteractionEnabled = NO;
[self.btnBack addSubview:disclosure];

// Add the label
UILabel *lbl = [[UILabel alloc] init];
frm = CGRectOffset(self.btnBack.bounds, 15, 0);
lbl.frame = frm;
lbl.textAlignment = NSTextAlignmentCenter;
lbl.text = @"BACK";
[self addSubview:lbl];

1

সুইফ্ট 5.2 এক্সকোড 11.4

অ্যাপল সিম্বল শেভরন.ফেল্ট এখন একটি কাস্টম বোতাম তৈরি করার জন্য আরও মার্জিত সমাধানের অনুমতি দেয়। আমি আকারটি এবং যতটা সম্ভব স্পেসিংয়ের সাথে মিল রেখেছি।

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

import UIKit

class CustomBackButton: UIBarButtonItem {

    convenience init(target: Any, selector: Selector) {

        // Create UIButton
        let button = UIButton(frame: .zero)

        // Customise Title
        button.setTitle("Back", for: .normal)
        button.setTitleColor(.systemBlue, for: .normal)
        button.titleLabel?.font = UIFont.systemFont(ofSize: 17)

        // Customise Image
        let config = UIImage.SymbolConfiguration(pointSize: 19.0, weight: .semibold, scale: .large)
        let image = UIImage(systemName: "chevron.left", withConfiguration: config)
        button.setImage(image, for: .normal)

        // Add Target
        button.addTarget(target, action: selector, for: .touchUpInside)

        // Customise Spacing to match system Back button
        button.imageEdgeInsets = UIEdgeInsets(top: 0.0, left: -18.0, bottom: 0.0, right: 0.0)
        button.titleEdgeInsets = UIEdgeInsets(top: 0.0, left: -12.0, bottom: 0.0, right: 0.0)

        self.init(customView: button)
    }
}

এটি বাস্তবায়িত হতে পারে হয় ক UIToolbarItem, বা ক হিসাবেUINavigationItem

override func viewDidLoad() {
    super.viewDidLoad()

    // UIToolbar Item
    let barBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    let flexSpace = UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil)
    navigationController?.setToolbarHidden(false, animated: false)
    toolbarItems = [barBackButton, flexSpace]

    // Navigation Item
    let navBackButton = CustomBackButton(target: self, selector: #selector(backButtonTapped))
    navigationItem.leftBarButtonItem = navBackButton
}

@objc func backButtonTapped() {
    print("Back tapped")
}

আপনি যদি বোতামটি ফ্লিপ করতে চান এবং তীরটি ডানদিকে নির্দেশ করতে চান:

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

অ্যাপল সিম্বল ব্যবহার করুন "শেভরন.সাইট"

CustomBackButtonক্লাসে নিম্নলিখিত কোড যুক্ত করুন :

    // Put the image of the right side of the button
    button.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.titleLabel?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)
    button.imageView?.transform = CGAffineTransform(scaleX: -1.0, y: 1.0)

0

আপনি যদি এটি নিজে আঁকতে এড়াতে চান, আপনি অনিবন্ধিত শ্রেণিটি ব্যবহার করতে পারেন: শৈলী 1 সহ ইউআইএনএভিগেশনবটন 1 এটি অবশ্যই আপনার আবেদনটি অনুমোদিত হতে বাধা দিতে পারে ... / জন


0

ঠিক আছে, আপনার প্রতিটি আকারের জন্য আলাদা আলাদা বোতাম রাখতে হবে না, আপনি ব্যবহার করতে পারেন [UIImage stretchableImageWithLeftCapWidth:topCapHeight:]তবে কেবলমাত্র আমি খুঁজে পেয়েছি কাস্টম চিত্রগুলি।


0

আমারও একই সমস্যা ছিল এবং আমি একটি লাইব্রেরি পি বাটন বের করেছিলাম । এবং নমুনা হ'ল পিছনের নেভিগেশন বোতামের মতো বোতাম, যা কাস্টমাইজড বোতামের মতো যে কোনও জায়গায় ব্যবহার করা যেতে পারে।

এটার মতো কিছু: এখানে চিত্র বর্ণনা লিখুন


0

উপরের ডানদিকে আগের এবং পরবর্তী বোতাম সহ সুইফ্ট 3-তে উদাহরণ।

let prevButtonItem = UIBarButtonItem(title: "\u{25C0}", style: .plain, target: self, action: #selector(prevButtonTapped))
let nextButtonItem = UIBarButtonItem(title: "\u{25B6}", style: .plain, target: self, action: #selector(nextButtonTapped))
self.navigationItem.rightBarButtonItems = [nextButtonItem, prevButtonItem]

0

দ্রুতগতি

// create button
    var backButton = UIButton(type: 101)

    // left-pointing shape!
    backButton.addTarget(self, action: #selector(self.backAction), for: .touchUpInside)
    backButton.setTitle("Back", for: .normal)

    // create button item -- possible because UIButton subclasses UIView!
    var backItem = UIBarButtonItem(customView: backButton)

    // add to toolbar, or to a navbar (you should only have one of these!)
    toolbar.items = [backItem]
    navItem.leftBarButtonItem = backItem

-5

এটা চেষ্টা কর. আমি নিশ্চিত যে এরকম একটি তৈরি করতে আপনার পিছনে বোতামের চিত্রের দরকার নেই।

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back"
                                                               style:UIBarButtonItemStyleBordered
                                                              target:self
                                                              action:@selector(yourSelectorGoesHere:)];
self.navigationItem.backBarButtonItem = backButton;

আপনাকে যা করতে হবে তা হ'ল :)


-23

তুমি কেন এটা করছ? আপনি যদি এমন কিছু চান যা নেভিগেশন বারের মতো দেখায়, ইউআইএনএভিগেশন বারটি ব্যবহার করুন।

টুলবারগুলির সাথে নির্দিষ্ট ভিজ্যুয়াল স্টাইল যুক্ত রয়েছে। আইফোন রাষ্ট্রের জন্য হিউম্যান ইন্টারফেস নির্দেশিকা:

একটি সরঞ্জামদণ্ডটি স্ক্রিনের নীচের প্রান্তে উপস্থিত হয় এবং এতে বোতামগুলি থাকে যা বর্তমান দৃশ্যে অবজেক্ট সম্পর্কিত ক্রিয়া করে।

এটি তখন কোনও পাঠ্য না দিয়ে মোটামুটি স্কোয়ার আইকনগুলির কয়েকটি ভিজ্যুয়াল উদাহরণ দেয়। আমি আপনাকে এইচআইজি অনুসরণ করতে অনুরোধ করব।


8
আমি এই সম্পর্কে অবহিত, আপনাকে ধন্যবাদ। যাইহোক, আমি বিশ্বাস করি আমার অভিযুক্ত ব্যবহার যথাযথ। আপনি কি আরও সহায়ক হতে পারেন, ধরে নিয়ে যে আমি সত্যিই যা চাইছিলাম তা করতে চাই?
মার্কো

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

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