oc之mac中NSPopUpButton

2016.07.28 16:13* 字数 191 阅读 1662评论 2喜欢 4

NSPopUpButton 下拉列表按钮,有两种。一种只有下拉箭头的按钮,另一种是既有上拉,也有下拉。

  • 如果设置只有向下的箭头,这最上面的item 只会出现一次,一旦其他的item选中之后, 就找不到第一个item了。 所以, 一般初始的item是一个不用的提示,比如要选择地区,那么第一个就放城市的提示信息,就行了。
  • 如果既有上拉按钮也有下拉按钮,那么所有的item都会显示在下拉列表框中。

## ****下面以只有下拉箭头的按钮为例进行说明:

// pullsDown 设置为 YES 只有向下的箭头

    NSPopUpButton *popBtn = [[NSPopUpButton alloc] initWithFrame:CGRectMake(0, 100, 100, 30) pullsDown:YES];

    [popBtn addItemWithTitle:@"城市"];

    [popBtn addItemWithTitle:@"上海"];

    [popBtn addItemWithTitle:@"广州"];

    [popBtn addItemWithTitle:@"深圳"];

    [popBtn addItemWithTitle:@"河南"];

    

    [self.view addSubview:popBtn];

    

    // popBtn 的点击事件

    [popBtn setTarget:self];

    [popBtn setAction:@selector(handlePopBtn:)];

 

NSPopUpButton 选中item的相应事件:

- (void)handlePopBtn:(NSPopUpButton *)popBtn {

    // 选中item 的索引

    NSLog(@"%d", popBtn.indexOfSelectedItem);

//    [popBtn selectItemAtIndex:popBtn.indexOfSelectedItem];

    popBtn.title = popBtn.selectedItem.title;

}

 
 

只有下拉按钮.jgp  

上拉和下拉按钮都有的效果图

小礼物走一走,来简书关注我

 

NSPopUpButton创建菜单与子菜单

 NSPopUpButton *popup = [[NSPopUpButton alloc] initWithFrame: 
      NSMakeRect(0, 0, 150, 22)];
      id item;
      NSMenuItem *menuItem;
      NSMenu *submenu;


      [popup setAutoenablesItems: NO];
    
      [popup addItemWithTitle: @"Marguerite"];
      [[popup itemWithTitle: @"Marguerite"] setEnabled: YES];
      [popup addItemWithTitle: @"Julie"];
      [[popup itemWithTitle: @"Julie"] setEnabled: YES];
      [popup addItemWithTitle: @"Liv"];
      [[popup itemWithTitle: @"Liv"] setEnabled: YES];
      [popup addItemWithTitle: @"Juliette"];
      [[popup itemWithTitle: @"Juliette"] setEnabled: YES];

      item = [popup itemWithTitle: @"Julies"];
      [popup selectItem: item];


      [toolbarItem setLabel: @"Just... popup"];
      [toolbarItem setView: popup];
    
      menuItem = [[NSMenuItem alloc] initWithTitle: @"More..." 
                                            action: NULL
                                     keyEquivalent: @""];
      submenu = [[NSMenu alloc] initWithTitle: @""];
      [submenu addItemWithTitle: @"Marguerite" 
                         action: @selector(reflectMenuSelection:) 
                  keyEquivalent: @""];
      [submenu addItemWithTitle: @"Julie" 
                         action: @selector(reflectMenuSelection:) 
                  keyEquivalent: @""];
      [submenu addItemWithTitle: @"Liv" 
                         action: @selector(reflectMenuSelection:) 
                  keyEquivalent: @""];
      [submenu addItemWithTitle: @"Juliette" 
                         action: @selector(reflectMenuSelection:) 
                  keyEquivalent: @""];
      [menuItem setSubmenu: AUTORELEASE(submenu)];
      [toolbarItem setMenuFormRepresentation: AUTORELEASE(menuItem)];

 

 

[Cocoa]_[初级]_[NSPopUpButton重绘实例]

2015年04月28日 19:37:57 Foreveroriginal 阅读数:712

 

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/moqj_123/article/details/45341071

场景:比如说,定义一个支持多种格式的控件,包含下拉菜单进行多种选择.由于标准的控件在界面上布局和自己所需的相差很多,所以要对控件进行重绘。

一下是具体实例:

类似于带下拉菜单的文本编辑框。

//  MqjPopUpButton.m

//  MqjEditContact

//

//  Created by mac-d on 4/28/15.

//  Copyright (c) 2015 mac-d. All rights reserved.

//

#import "MqjPopUpButton.h"

@implementation MqjPopUpButton

- (id)initWithFrame:(NSRect)frame

{

    self = [super initWithFrame:frame];

    if (self) {

        // Initialization code here.

    }

    return self;

}

-(BOOL) isFlipped

{

    return YES;

}

- (void)drawRect:(NSRect)dirtyRect

{

    // Drawing code here.

    //[super drawRect:dirtyRect];

    [[NSColor colorWithCalibratedRed: 255/255.0 green:255/255.0 blue:255/255.0 alpha:1] setFill];

    NSRectFill(dirtyRect);

    NSString *path =[[NSBundle mainBundle] pathForResource:@"down" ofType:@"png"];

    NSImage *image =[[NSImage alloc] initWithContentsOfFile:path];

    NSRect rect =NSZeroRect;

    rect.size = [image size];

    NSPoint p = dirtyRect.origin;

    p.x +=dirtyRect.size.width-image.size.width-4;

    p.y +=(dirtyRect.size.height-image.size.height)/2;

    [image drawInRect:NSMakeRect(p.x, p.y, image.size.width, image.size.height) fromRect:rect operation:NSCompositeSourceOver fraction:1.0 respectFlipped:YES hints:nil];

    //画横线

    NSBezierPath *line = [NSBezierPath bezierPath];

    [line setLineWidth:1];

    [[NSColor colorWithCalibratedRed: 147/255.0 green:147/255.0 blue:147/255.0 alpha:0.5] setStroke];

    NSPoint endPoint = dirtyRect.origin;

    endPoint.x += dirtyRect.size.width;

    [line moveToPoint:dirtyRect.origin];

    [line lineToPoint:endPoint];

    [line stroke];

    [line moveToPoint:NSMakePoint(dirtyRect.origin.x, dirtyRect.origin.y+dirtyRect.size.height)];

    [line lineToPoint:NSMakePoint(endPoint.x,dirtyRect.origin.y+dirtyRect.size.height)];

    [line stroke];

    //画竖线

    [line moveToPoint:dirtyRect.origin];

    [line lineToPoint:NSMakePoint(dirtyRect.origin.x,dirtyRect.origin.y+dirtyRect.size.height)];

    [line stroke];

    [line moveToPoint:endPoint];

    [line lineToPoint:NSMakePoint(endPoint.x,dirtyRect.origin.y+dirtyRect.size.height)];

    [line stroke];

    //对选中的item设置勾选

    NSArray *array = [super itemArray];

    for(NSMenuItem *item in array)

    {

        if (item == [self selectedItem])

        {

            [item setState:NSOnState];

        }

        else

        {

            [item setState:NSOffState];

        }

    }

    NSString *title =[[super selectedItem] title];

    if (title == nil)

    {

        title = @"";

   }

    NSLog(@"title:%@",title);


    //获取字符串的宽度和高度

    NSSize titleSize = [title sizeWithAttributes:[NSDictionary dictionaryWithObject:[self font] forKey:NSFontAttributeName]];

    CGFloat titleY = dirtyRect.origin.y + (dirtyRect.size.height - titleSize.height)/2;

    NSRect rectTitle = dirtyRect;

    rectTitle.origin = NSMakePoint(10, titleY);

    rectTitle.size.height = titleSize.height;

    [title drawInRect:rectTitle withAttributes:nil];

}


@end

pastedGraphic.png

在MainMenu.xib布局一个NSPopUpButton,class:改为如图所示。

运行结果:

pastedGraphic_1.png

 

原文地址:https://www.cnblogs.com/sundaymac/p/10337405.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


现在给大家介绍一下如何查询MAC的生产日期,希望对你查询MAC的生产日期操作有所帮助。
1、点击【编辑虚拟机设置】,转到【CD/DVD (SATA)】,选中【使用 ISO 映像文件】复选框,点击【浏览】,找到已经准备好的 MacOS Ventura 镜像;4、客户机操作系统下,选择【Apple Mac OS X】,版本选择大家需要的【macOS版本】,再点击【下一步】;7、完成【抹掉】后,左上角关闭该窗口,返回上一界面,选择【Install macOS】,正式进入苹果系统安装流程;1、打开 Vmware Workstation,然后点击左上角的【文件】,打开的下拉项中,选择【新建虚拟机】;
注意:用哪个版本的 Python 运行安装脚本,pip 就被关联到哪个版本。一般情况 pip 对应的是 Python 2.7,pip3 对应的是 Python 3.x。pip介绍:pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能。1.打开后输入python3确定电脑上是否已安装python3,如果输入python是查看mac上的自带版本。如果你在 python.org 下载最新版本的安装包,则是已经自带了该工具。如下图是已经成功安装pip的状态。
Mac 安装nvm
Mac(M1)安装VMware虚拟机及Linux系统
Mac 如何安装 Telnet,mac安装telnet命令
是不是对键盘输入厌烦了?那你可以试试语音输入。 你可以按照下面的步骤打开Mac的语音输入功能。 以 macOS Catalina 为例: Step 1. 点击屏幕左上角的图标,点击【系统偏好设置】。
1.clean my Mac x 2.Cleaner One Pro 3.App Cleaner
按caps lock键。 CapsLock键,短按切换中英文,长按切换大小写。
windows: 1.PowerToys 2.不用软件进行分屏 Windows 10技巧1:窗口1/4分屏 - Acer Community 介绍说明 从Win7时代开始,微软便引入了屏幕热区概念,即
https://zhuanlan.zhihu.com/p/111111684 下载地址: https://www.smoothscroll.net/mac/
https://support.apple.com/zh-cn/guide/imac/apd2e7352054/mac 浏览:24 英寸 iMac 24 英寸 iMac 比以往更个
在Mac自带的中文输入法中,“反斜杠”键(“\”)就是顿号。
1.系统偏好设置。 2和3步如下图: 注意:在设置后,启用capslock大写的时候,需要长按capslock键。
Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别。即时渲染使得你写Markdown就想是写Word文档一样流畅自如,不像其他编辑器的有编辑栏和显示栏。简洁美观实时预览扩展语法跨平台免费Typora现在收费,但你仍然可以在官方网站上找到历史版本。虽然新版本仍然值得收费,但免费版本仍然可以使用。httpshttpshttpshttpshttpshttpshttpshttps。......
Mac M1安装Centos7
连接为官方下载链接, 直接复制MD5可迅雷下载亲测可用, 和付费版使用体验无差别.1. Windows 64bithttps://download.typora.io/windows/typora-setup-x64-0.11.18.exeMD5:12F96372BEE2951ACF5627EA28F8A389**2. Window 32bit **https://download.typora.io/windows/typora-setup-ia32-0.11.18.exeMD5:F5036
ubuntu22.04 、系统安装、win双系统、Ubuntu分区、Ubuntu优化、美化gnome tweaks,扩展、macos、搜狗输入法、wps字体、微信安装、navicat15、java开发环境搭建、idea 输入法问题处理、双系统问题、github慢等等。史上最全保姆级Ubuntu使用教程
MAC怎么获取文件路径 MAC获取文件路径的四种方法