如何以编程方式在其上添加 UINavigationBar 和后退按钮

Posted

技术标签:

【中文标题】如何以编程方式在其上添加 UINavigationBar 和后退按钮【英文标题】:How to programmatically add a UINavigationBar and a back button on it 【发布时间】:2012-11-26 13:36:03 【问题描述】:

我是新手,尝试使用UITextView 制作类似于 iPhone 的 Notes 应用程序。 我收到了textView 和线路,它工作正常。

我的问题是我想在上面添加一个UINavigationBar 和后退按钮。 我想在底部添加一个UIToolBar,并在其上添加 2 个 toolBarItems 如何以编程方式执行此操作。任何帮助对我来说都是一个很大的推动力..

下面是代码sn-p。

NoteView.h

@interface NoteView : UITextView <UITextViewDelegate,UITabBarControllerDelegate>



NoteView.m

- (id)initWithFrame:(CGRect)frame 

  self = [super initWithFrame:frame];

  if (self) 
      self.backgroundColor = [UIColor colorWithRed:0.6f green:0.6f blue:1.0f alpha:1.0f];
      self.font = [UIFont fontWithName:@"MarkerFelt-Thin" size:20];
      self.contentMode = UIViewContentModeRedraw;
  
  return self;


- (void)drawRect:(CGRect)rect 
    CGContextRef context = UIGraphicsGetCurrentContext(); 

    CGContextSetStrokeColorWithColor(context, [UIColor colorWithRed:0.0f green:0.0f blue:0.0f alpha:0.2f].CGColor);
    CGContextSetLineWidth(context, 1.0f);

    CGContextBeginPath(context);

    NSUInteger numberOfLines = (self.contentSize.height + self.bounds.size.height) /   self.font.leading;

    CGFloat baselineOffset = 6.0f;
    for (int x = 0; x < numberOfLines; x++) 
        CGContextMoveToPoint(context, self.bounds.origin.x, self.font.leading*x + 0.5f + baselineOffset);
        CGContextAddLineToPoint(context, self.bounds.size.width, self.font.leading*x + 0.5f + baselineOffset);
    

    CGContextClosePath(context);
    CGContextStrokePath(context);

AddNotesViewController.h

@interface AddNotesViewController : UIViewController <UITextViewDelegate,UITabBarDelegate>

    NoteView *note;


@property (nonatomic, retain) NoteView *note;

@end

AddNotesViewController.m

- (void)loadView 

    [super loadView];
    self.note = [[[NoteView alloc] initWithFrame:self.view.bounds] autorelease];
    [self.view addSubview:note];
    note.delegate = self;
    note.text=@"";


- (void)scrollViewDidScroll:(UIScrollView *)scrollView

    [note setNeedsDisplay];


- (void)textViewDidBeginEditing:(UITextView *)textView 

    CGRect frame = self.view.bounds;
    frame.size.height -= KEYBOARD_HEIGHT;
    note.frame = frame;


-  (void)textViewDidEndEditing:(UITextView *)textView 

    note.frame = self.view.bounds;


- (BOOL)textView:(UITextView *)textView 
shouldChangeTextInRange:(NSRange)range 
        replacementText:(NSString *)text

    if ([text isEqualToString:@"\n"]) 
        [textView resignFirstResponder];
        return NO;
    
    return YES;

请告诉我如何以及在哪里添加导航栏,后退按钮和工具栏,2 toolBarItems 就可以了。提前谢谢...

【问题讨论】:

重复。 ButtonOnNav & NavBackButton 已经回答。通过link 和F&Q。 ***.com/questions/13488710/… 你是否使用导航控制器 是的,我正在使用导航控制器 【参考方案1】:

导航栏图片

UINavigationBar *navBar = [[self navigationController] navigationBar];
    UIImage *image = [UIImage imageNamed:@"TopBar.png"];
    [navBar setBackgroundImage:image forBarMetrics:UIBarMetricsDefault];  

返回按钮

-(void)getBackBtn

    UIButton *Btn =[UIButton buttonWithType:UIButtonTypeCustom];

    [Btn setFrame:CGRectMake(0.0f,0.0f,50.0f,30.0f)];
    [Btn setBackgroundImage:[UIImage imageNamed:[NSString stringWithFormat:@"back.png"]]  forState:UIControlStateNormal];
    //[Btn setTitle:@"OK" forState:UIControlStateNormal];
    //Btn.titleLabel.font = [UIFont fontWithName:@"Georgia" size:14];
    [Btn addTarget:self action:@selector(backBtnPress:) forControlEvents:UIControlEventTouchUpInside];
    UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithCustomView:Btn];
    [self.navigationItem setLeftBarButtonItem:addButton];
  

BackButtonAction

-(IBAction)backBtnPress:(id)sender

  

在 NavigationBar 上查看

对于导航栏上的查看,您可以按照我的回答Link

【讨论】:

【参考方案2】:

使用此代码....

UIBarButtonItem *addButton = [[UIBarButtonItem alloc]
                                  initWithTitle:NSLocalizedString(@"Back", @"")
                                  style:UIBarButtonItemStyleDone
                                  target:self
                                  action:@selector(YourActionMethod:)];


self.navigationItem.leftBarButtonItem = addButton;

【讨论】:

我必须在 - (void)loadView 的 AddNotesViewController.m 中添加它对吗?? 在上面的sn-p中,你观察到noteView.M r8中的drawRect了吗?该代码是在 textView 中绘制线条,因此此 barButtonItems 不显示...

以上是关于如何以编程方式在其上添加 UINavigationBar 和后退按钮的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式设置在视图控制器上添加的对象的标记

UINavigation 控制器:以编程方式呈现和关闭

如何在查看器中使用 Autodesk.Viewing.MarkupsCore 扩展,以便我可以在其上绘图?

如何以正确的方式在 Nuxt 项目中添加 Vuepress?

如何将 Sqlite 数据库文件复制/放入设备以在其上测试应用程序 - Xcode

以编程方式点击 UITextField [关闭]