কোনও ইউআইএনএভিগেশন কন্ট্রোলারে কীভাবে ডান বোতাম যুক্ত করবেন?


191

আমি কোনও সাফল্য ছাড়াই একটি নেভিগেশন নিয়ামকের শীর্ষ বারে একটি রিফ্রেশ বোতাম যুক্ত করার চেষ্টা করছি।

এখানে শিরোনাম:

@interface PropertyViewController : UINavigationController {

}

এখানে আমি এটি যুক্ত করার চেষ্টা করছি:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
        UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain
                                          target:self action:@selector(refreshPropertyList:)];      
        self.navigationItem.rightBarButtonItem = anotherButton;
    }
    return self;
}

উত্তর:


362

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

- (void)viewDidLoad {
  [super viewDidLoad];

  UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain target:self action:@selector(refreshPropertyList:)];          
  self.navigationItem.rightBarButtonItem = anotherButton;
  // exclude the following in ARC projects...
  [anotherButton release];
}

এটি বর্তমানে কেন কাজ করছে না সে হিসাবে, আমি আরও কোড না দেখে 100% নিশ্চিততার সাথে বলতে পারি না, তবে init এবং ভিউ লোডিংয়ের মধ্যে প্রচুর পরিমাণে ঘটে যায় এবং আপনি এমন কিছু করছেন যা নেভিগেশন আইটেমটি পুনরায় সেট করার কারণ হতে পারে মধ্যে।


45
আমি আপনি ইউআইএনএভিগেশন নিয়ন্ত্রণকারী সাবক্লাসের বাইরে এটি করছেন, আপনি এটির জন্য এটি উল্লেখ করবেন: #NavController.topLevelController.navicationItem.rightBarButtonItem = আরেকটি বাটন
মুক্তিপণ উইভার

2
আমি প্রস্তাবিত সমাধানটি বাস্তবায়ন করছিলাম এবং আমার অ্যাপ্লিকেশন ক্রাশ হতে থাকবে যতক্ষণ না বুঝেছি যে @ নির্বাচক পদ্ধতির নামটি কোলন (:) এ শেষ হতে হবে।
স্টিলথ

10
এমনকি কোনও ইউআইএনএভিগেশন কন্টোলারের ভিডডিলোড পদ্ধতির অভ্যন্তরেও আমাকে এটির মতো ফোন করতে হয়েছিলself.topViewController.navigationItem.leftBarButtonItem = nextButton;
জোসেফ

ধন্যবাদ! @ জোসেফ, আপনার ব্যাখ্যা আমাকে বাঁচিয়েছে। (y) :)
প্রসন্ন্না

38

এটিকে ধাক্কা দেওয়া হচ্ছে এমন ভিউ কন্ট্রোলারের আইটেমের নেভিগেশন আইটেমে বোতামটি যুক্ত করার চেষ্টা করুন PropertyViewControllerআপনার তৈরি শ্রেণীর ।

এটাই:

MainViewController *vc = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
UIButton *infoButton = [UIButton buttonWithType:UIButtonTypeInfoLight];
[infoButton addTarget:self action:@selector(showInfo) forControlEvents:UIControlEventTouchUpInside];
vc.navigationItem.rightBarButtonItem = [[[UIBarButtonItem alloc] initWithCustomView:infoButton] autorelease];

PropertyViewController *navController = [[PropertyViewController alloc] initWithRootViewController:vc];

এখন, এই ইনফুটটি যা প্রোগ্রামক্রমে তৈরি হয়েছে তা নেভিগেশন বারে প্রদর্শিত হবে। ধারণাটি হ'ল নেভিগেশন কন্ট্রোলার যেটি প্রদর্শন করতে চলেছে UIViewControllerসেগুলি থেকে তার প্রদর্শন তথ্য (শিরোনাম, বোতামগুলি ইত্যাদি) তুলে নেয় । আপনি আসলে বোতাম এবং এগুলি সরাসরি যুক্ত করেন না UINavigationController


2
ডানবার্ট বাটন আইটেমটি সরাসরি ইউআইএনএভিগেশন কন্ট্রোলারটিতে সেট করা আমার পক্ষে কার্যকর হয়নি (উপরে লুই জারবার্গ প্রস্তাবিত হিসাবে)। পরিবর্তে আইডেমটি সরাসরি ইউআইভিউউকন্ট্রোলারে সেট করে এডেম কাজ করার প্রস্তাব দেয়!
লিবিয়াথন

4
জন্য +1 "দৃশ্যে নিয়ন্ত্রকের navigationItem যে ধাক্কা হতে যাচ্ছে বাটন যুক্ত করার চেষ্টা করুন" !
Kjuly

25

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

আপনার স্টোরিবোর্ডে একটি নেভিগেশন নিয়ন্ত্রক যুক্ত করুন

আপনার ভিউ কন্ট্রোলারটি নির্বাচন করুন এবং তারপরে এক্সকোড মেনুতে সম্পাদক> এম্বেড ইন> নেভিগেশন কন্ট্রোলার চয়ন করুন

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

বিকল্পভাবে, আপনি UINavigationBarঅবজেক্ট লাইব্রেরি থেকে একটি যুক্ত করতে পারেন ।

একটি বার বাটন আইটেম যুক্ত করুন

UIBarButtonItemশীর্ষস্থানীয় নেভিগেশন বারে অবজেক্ট লাইব্রেরি থেকে একটি টেনে আনুন ।

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

এটিকে ঐটির মত দেখতে হবে:

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

বৈশিষ্ট্য নির্ধারণ করুন

ডবল ক্লিক করে পারে "আইটেম" "রিফ্রেশ" ভালো কিছু করার জন্য টেক্সট পরিবর্তন করতে, কিন্তু একটি প্রকৃত আইকন রিফ্রেশ যা আপনি ব্যবহার করতে পারেন। শুধু পরিদর্শক আরোপ নির্বাচন UIBarButtonItemএবং জন্য সিস্টেম আইটেম চয়ন রিফ্রেশ

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

এটি আপনাকে ডিফল্ট রিফ্রেশ আইকন দেবে।

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

একটি আইবি অ্যাকশন যুক্ত করুন

UIBarButtonItemএটিকে যুক্ত করতে কন্ট্রোল থেকে ভিউ কন্ট্রোলারে টানুন @IBAction

class ViewController: UIViewController {

    @IBAction func refreshBarButtonItemTap(sender: UIBarButtonItem) {
        
        print("How refreshing!")
    }
    
}

এটাই.


দুঃখিত, আপনি যা বলছেন তা আমি পুরোপুরি অনুসরণ করতে পারি না। আপনি কী বলছেন তা চিত্রিত করে একটি নতুন প্রশ্ন করার চেষ্টা করুন। তারপরে এখানে একটি লিঙ্ক যুক্ত করুন।
সুরগাচ

@ সুরগাচ, স্টোরিবোর্ডের পরিবর্তে আমি কীভাবে xib ফাইল দিয়ে একই জিনিস করতে পারি? , ধন্যবাদ
ক্রিশ্চিয়ান চ্যাপারো এ।

@CristianChaparroA। সাধারণত xib ফাইলগুলি একক দর্শনগুলির জন্য হয় এবং নেভিগেশন বার (যা বার বোতাম আইটেমকে হোস্ট করে) একাধিক দর্শনগুলির জন্য। আমি বার বোতামের আইটেমগুলির সাথে কোনও এক্সিব ব্যবহার করি নি। আপনি একটি নতুন প্রশ্ন জিজ্ঞাসা করার চেষ্টা করতে পারেন এবং তারপরে এটি এখানে লিঙ্ক করতে পারেন।
সুরগাচ

14

"রিফ্রেশ" এর জন্য একটি ডিফল্ট সিস্টেম বোতাম রয়েছে:

- (void)viewDidLoad {
    [super viewDidLoad];

    UIBarButtonItem *refreshButton = [[[UIBarButtonItem alloc] 
                            initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh
                            target:self action:@selector(refreshClicked:)] autorelease];
    self.navigationItem.rightBarButtonItem = refreshButton;

}

- (IBAction)refreshClicked:(id)sender {

}

11

আপনি এটি ব্যবহার করতে পারেন:

উদ্দেশ্য গ

UIBarButtonItem *rightSideOptionButton = [[UIBarButtonItem alloc] initWithTitle:@"Right" style:UIBarButtonItemStylePlain target:self action:@selector(rightSideOptionButtonClicked:)];          
self.navigationItem.rightBarButtonItem = rightSideOptionButton;

দ্রুতগতি

let rightSideOptionButton = UIBarButtonItem()
rightSideOptionButton.title = "Right"
self.navigationItem.rightBarButtonItem = rightSideOptionButton

6
-(void) viewWillAppear:(BOOL)animated
{

    UIButton *btnRight = [UIButton buttonWithType:UIButtonTypeCustom];
    [btnRight setFrame:CGRectMake(0, 0, 30, 44)];
    [btnRight setImage:[UIImage imageNamed:@"image.png"] forState:UIControlStateNormal];
    [btnRight addTarget:self action:@selector(saveData) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barBtnRight = [[UIBarButtonItem alloc] initWithCustomView:btnRight];
    [barBtnRight setTintColor:[UIColor whiteColor]];
    [[[self tabBarController] navigationItem] setRightBarButtonItem:barBtnRight];

}

কেউ কি আমাকে বলতে পারবেন ভিউডিল অ্যাপের পরিবর্তে ভিউডিলডেড-এর পরিবর্তে কোনও ক্ষতি আছে
নিরঞ্জন মোলকেরি

6

দ্রুত 2 এর জন্য:

self.title = "Your Title"

var homeButton : UIBarButtonItem = UIBarButtonItem(title: "LeftButtonTitle", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("yourMethod"))

var logButton : UIBarButtonItem = UIBarButtonItem(title: "RigthButtonTitle", style: UIBarButtonItemStyle.Plain, target: self, action: Selector("yourMethod"))

self.navigationItem.leftBarButtonItem = homeButton
self.navigationItem.rightBarButtonItem = logButton

আমি নতুন নতুন সুইফট 2 নির্বাচনকারী নির্বাচন করার পরামর্শ দিচ্ছি: # নির্বাচক (শ্রেণীর নাম।
ফাংশননাম

5

সুইফটে সমাধানটি এখানে দেওয়া হয়েছে (প্রয়োজনীয় বিকল্পগুলি সেট করুন)

var optionButton = UIBarButtonItem()
optionButton.title = "Settings"
//optionButton.action = something (put your action here)
self.navigationItem.rightBarButtonItem = optionButton

4

কেন আপনি সাবক্লাস UINavigationController? আপনার যা করতে হবে তা এটিতে একটি বোতাম যুক্ত করা থাকলে এটি সাবক্লাস করার দরকার নেই।

UINavigationControllerউপরের অংশের সাথে একটি হাইয়ারকি সেট আপ করুন এবং তারপরে আপনার রুট ভিউ কন্ট্রোলারের viewDidLoad:পদ্ধতিতে: বোতামটি সেট আপ করুন এবং কল করে নেভিগেশন আইটেমটিতে এটি সংযুক্ত করুন

[[self navigationItem] setRightBarButtonItem:myBarButtonItem];

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


3

সুইফট 4:

override func viewDidLoad() {
    super.viewDidLoad()

    navigationItem.leftBarButtonItem = UIBarButtonItem(title: "tap me", style: .plain, target: self, action: #selector(onButtonTap))
}

@objc func onButtonTap() {
    print("you tapped me !?")
}

ডান পাশের বোতামটি চাইলে কেবল নেভিগেশনআইটেমট্রেট
বারবাটন আইটেমটি ব্যবহার করুন

2
UIView *view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, 110, 50)];
view.backgroundColor = [UIColor clearColor];

UIButton *settingsButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[settingsButton setImage:[UIImage imageNamed:@"settings_icon_png.png"] forState:UIControlStateNormal];
[settingsButton addTarget:self action:@selector(logOutClicked) forControlEvents:UIControlEventTouchUpInside];
[settingsButton setFrame:CGRectMake(40,5,32,32)];
[view addSubview:settingsButton];

UIButton *filterButton =  [UIButton buttonWithType:UIButtonTypeCustom];
[filterButton setImage:[UIImage imageNamed:@"filter.png"] forState:UIControlStateNormal];
[filterButton addTarget:self action:@selector(openActionSheet) forControlEvents:UIControlEventTouchUpInside];
[filterButton setFrame:CGRectMake(80,5,32,32)];
[view addSubview:filterButton];



self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:view];

2

এটি চেষ্টা করুন। এটা আমার জন্য কাজ।

নেভিগেশন বার এবং ডান বোতামে ব্যাকগ্রাউন্ড চিত্র যুক্ত করেছে।

 UIBarButtonItem *Savebtn=[[UIBarButtonItem alloc]initWithImage:[[UIImage    
 imageNamed:@"bt_save.png"]imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal] 
 style:UIBarButtonItemStylePlain target:self action:@selector(SaveButtonClicked)];
 self.navigationItem.rightBarButtonItem=Savebtn;


0
- (void)viewWillAppear:(BOOL)animated
{    
    [self setDetailViewNavigationBar];    
}
-(void)setDetailViewNavigationBar
{
    self.navigationController.navigationBar.tintColor = [UIColor purpleColor];
    [self setNavigationBarRightButton];
    [self setNavigationBarBackButton];    
}
-(void)setNavigationBarBackButton// using custom button 
{
   UIBarButtonItem *leftButton = [[UIBarButtonItem alloc] initWithTitle:@"  Back " style:UIBarButtonItemStylePlain target:self action:@selector(onClickLeftButton:)];          
   self.navigationItem.leftBarButtonItem = leftButton;    
}
- (void)onClickLeftButton:(id)sender 
{
   NSLog(@"onClickLeftButton");        
}
-(void)setNavigationBarRightButton
{

  UIBarButtonItem *anotherButton = [[UIBarButtonItem alloc] initWithTitle:@"Show" style:UIBarButtonItemStylePlain target:self action:@selector(onClickrighttButton:)];          
self.navigationItem.rightBarButtonItem = anotherButton;   

}
- (void)onClickrighttButton:(id)sender 
{
   NSLog(@"onClickrighttButton");  
}

0
    self.navigationItem.rightBarButtonItem =[[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemRefresh target:self action:@selector(refreshData)];



}

-(void)refreshData{
    progressHud= [MBProgressHUD showHUDAddedTo:self.navigationController.view animated:YES];
    [progressHud setLabelText:@"拼命加载中..."];
    [self loadNetwork];
}

0

আপনার - (void)pushViewController:(UIViewController *)viewController animated:(BOOL)animatedপদ্ধতিতে আপনার বারবটন আইটেম যুক্ত করা উচিত ।


0

এই উদ্দেশ্য-সি কোডটি কেবল অনুলিপি করুন এবং আটকান।

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self addRightBarButtonItem];
}
- (void) addRightBarButtonItem {
    UIButton *btnAddContact = [UIButton buttonWithType:UIButtonTypeContactAdd];
    [btnAddContact addTarget:self action:@selector(addCustomerPressed:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *barButton = [[UIBarButtonItem alloc] initWithCustomView:btnAddContact];
    self.navigationItem.rightBarButtonItem = barButton;
}

#pragma mark - UIButton
- (IBAction)addCustomerPressed:(id)sender {
// Your right button pressed event
}

আমি সাহায্য করার চেষ্টা করছি
বিবেক

0

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

  1. মেইন স্টোরবোর্ডে যান।
  2. নতুন ভিউ কন্ট্রোলারটি নির্বাচন করুন।
  3. দস্তাবেজের রূপরেখায় যান।
  4. কন্ট্রোলার সামগ্রী দেখুন দেখুন।
  5. নতুন ভিউ কন্ট্রোলারের যদি নেভিগেশন আইটেম না থাকে তবে আগের ভিউ কন্ট্রোলার থেকে নেভিগেশন আইটেমটি অনুলিপি করুন এবং এটিকে নতুন দর্শন নিয়ামকের মধ্যে পেস্ট করুন।
  6. প্রকল্পটি সংরক্ষণ এবং পরিষ্কার করুন।

0

এছাড়াও আপনি একাধিক বোতাম ব্যবহার করে যুক্ত করতে সক্ষম rightBarButtonItems

-(void)viewDidLoad{

    UIBarButtonItem *button1 = [[UIBarButtonItem alloc] initWithTitle:@"button 1" style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD1:)];
    UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithTitle:@"button 2" style:UIBarButtonItemStylePlain target:self action:@selector(YOUR_METHOD2:)];

    self.navigationItem.rightBarButtonItems = @[button1, button2];
}

-1

@ আর্টিলিহিরো: এটি যদি নেভিগেশন ভিত্তিক প্রকল্প হয় তবে আপনি বেসভিউ কনট্রোলার তৈরি করতে পারেন। অন্যান্য সমস্ত দর্শন এই বেসভিউয়ের উত্তরাধিকারী হবে। বেসভিউতে আপনি ডান বোতাম যুক্ত করতে বা বাম বোতামের পাঠ্য পরিবর্তন করতে জেনেরিক পদ্ধতিগুলি সংজ্ঞায়িত করতে পারেন।

উদা:

@ ইন্টারফেস বেসকন্ট্রোলার: ইউআইভিউকন্ট্রোলার {

} - (অকার্যকর) সেটব্যাকবটনক্যাপশন: (এনএসএসটিং *) ক্যাপশন;

(অকার্যকর) সেটরাইটবাটনক্যাপশন: (এনএসএসআর্টিং *) ক্যাপশন নির্বাচন করুন: (এসইএল) নির্বাচক;

@ এন্ড // বেসভিউ.এম এ

(শূন্য) সেটব্যাক বাটনক্যাপশন: (এনএসএসআর্টিং *) ক্যাপশন {

UIBarButtonItem *backButton =[[UIBarButtonItem alloc] init];

backButton.title= caption;
self.navigationItem.backBarButtonItem = backButton;
[backButton release];

} - (অকার্যকর) সেটরাইটবাটনক্যাপশন: (এনএসএসআরটিং *) ক্যাপশন সিলেক্ট: (এসইএল) নির্বাচক {

  UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] init];
rightButton.title = caption;

rightButton.target= self;

[rightButton setAction:selector];

self.navigationItem.rightBarButtonItem= rightButton;

[rightButton release];

}

এবং এখন যে কোনও কাস্টম ভিউতে, এই বেস ভিউটি প্রয়োগ করুন পদ্ধতিগুলি কল করুন:

@ আন্তঃফেস লগইনভিউ: বেসকন্ট্রোলার {

কিছু পদ্ধতিতে কল বেস পদ্ধতিটি এইভাবে:

সেল সেল = @ সিলেক্টর (স্যুইচটো ফোরগটপিন);

[সুপার সেটরাইটবাটন ক্যাপশন: @ "পিন ভুলে গেছেন" সিলেক্ট: সেল];

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