mac os popover_popover - CSDN
  • MAC NSPopover

    2017-05-05 10:53:06
    下面通过NSStatusBar出发 NSPopver。 创建 NSStatusBar//获取系统单例NSStatusBar对象 NSStatusBar *statusBar = [NSStatusBar systemStatusBar]; //创建固定宽度的NSStatusItem NSStatusItem *item = [status...

    下面通过NSStatusBar出发 NSPopver。
    创建 NSStatusBar

    //获取系统单例NSStatusBar对象
        NSStatusBar *statusBar = [NSStatusBar systemStatusBar];
        //创建固定宽度的NSStatusItem
        NSStatusItem *item = [statusBar statusItemWithLength:NSSquareStatusItemLength];
        [item.button setTarget:self];
        [item.button setAction:@selector(itemAction:)];
        item.button.image = [NSImage imageNamed:@"menu_icon"];
    
        //保存到属性变量
        self.item = item;
        // 创建 popover
       // [self setUpPopover];

    运行就会发现在NSStatusBar上面显示一个图标。
    下面添加popover界面

    -(void) setUpPopover {
        self.popover = [[NSPopover alloc] init];
        self.popover.contentViewController = [[AppViewController alloc] init];
        self.popover.behavior = NSPopoverBehaviorApplicationDefined;
    }
    

    注:AppViewController是创建的一个控制器

    展开全文
  • Mac OS 开发

    2019-06-03 17:58:44
    1,应用设置 @objc func termedApp(){ //关闭应用 NSApplication.shared.terminate(nil) } //显示提示角标 @objc func showAppAlertNum(){ NSApp.dockTile.badgeLabel = "20" ... ...

    1,应用设置

     @objc func termedApp(){
            //关闭应用
           NSApplication.shared.terminate(nil)
            
        }
        //显示提示角标
        @objc func showAppAlertNum(){
            NSApp.dockTile.badgeLabel = "20"
        }
        //app图标弹跳
        @objc func appshaked(){
            /*
              criticalRequest 多次跳动,直到用户选中app
             
              informationalRequest 一次跳动
             */
            
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 5) {
                //此方法只能当前app处在非活跃状态
                NSApp.requestUserAttention(NSApplication.RequestUserAttentionType.criticalRequest)
            }
           
        }
        //隐藏或者显示dock图标
        @objc func hidOrShowDockIcon(){
            /*
             
             /* The application is an ordinary app that appears in the Dock and may have a user interface.  This is the default for bundled apps, unless overridden in the Info.plist. */
             case regular
             
             
             /* The application does not appear in the Dock and does not have a menu bar, but it may be activated programmatically or by clicking on one of its windows.  This corresponds to LSUIElement=1 in the Info.plist. */
             case accessory
             
             
             /* The application does not appear in the Dock and may not create windows or be activated.  This corresponds to LSBackgroundOnly=1 in the Info.plist.  This is also the default for unbundled executables that do not have Info.plists. */
             case prohibited
             */
            //隐藏dock上的图标,上面的toolbar 也会隐藏
            NSApp.setActivationPolicy(NSApplication.ActivationPolicy.accessory)
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 4) {
                //显示窗口
                NSApp.unhideWithoutActivation()
            }
        
        }
        
        override func viewDidAppear() {
            let window1 = view.window
            //标题
            window1?.title = "测试window"
            //背景色
            window1?.backgroundColor = NSColor.gray
            //设置窗口的按钮关闭和最小化和全屏
            //        window1?.standardWindowButton(NSWindow.ButtonType.closeButton)?.isHidden = true
                    window1?.standardWindowButton(NSWindow.ButtonType.zoomButton)?.isHidden = true
            //        window1?.standardWindowButton(NSWindow.ButtonType.miniaturizeButton)?.isHidden = true
            
            //设置窗口显示级别,可以将窗口置顶
            /*
             如果两个window的级别是一样的,就按照出现顺序,后出现的显示最顶层,否则就按照levelz值大小来显示
             
             */
            window1?.level =  NSWindow.Level(rawValue: NSInteger(CGWindowLevelForKey(CGWindowLevelKey.normalWindow)))
            
            //点击窗口背景支持鼠标拖动窗口
            window1?.isMovableByWindowBackground = true
            
            //希望窗口进来是全屏的
    //        window1?.toggleFullScreen(window1)
            
            //在Dock中有窗口提示
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+5) {
                window1?.dockTile.badgeLabel = "20"
            }
            
            //设置窗口样式
            
            //不显示窗体边线
            window1?.titlebarAppearsTransparent = true
        
        }
    

    AppDelegate.swift

    import Cocoa
    /***
     类似main函数入口
     */
    @NSApplicationMain
    class AppDelegate: NSObject, NSApplicationDelegate {
        var windownum = 0
    
    
        func applicationDidFinishLaunching(_ aNotification: Notification) {
            // Insert code here to initialize your application
            //获取窗口号
            guard let win = NSApp.mainWindow else {
                return
            }
            windownum = win.windowNumber
        }
    
        func applicationWillTerminate(_ aNotification: Notification) {
            // Insert code here to tear down your application
        }
        
        //重新开关应用,
        func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool {
            //如果主窗口已经显示
            if flag == true {
                return flag
            }
            //获取到app,让窗口显示出来
           /*
             NSApp.mainWindow 主窗口
            NSApp.keyWindow 当前窗口
             */
            let window = NSApp.window(withWindowNumber: windownum)
            window?.makeKeyAndOrderFront(nil)
            return true
        }
    
    }
    
    

    2,常见控件使用

    	//开启背景色可编辑
    		view.wantsLayer = true
            view.layer?.backgroundColor = NSColor.white.cgColor
            // Do view setup here.
            let button1 = NSButton(frame: NSMakeRect(0, 0, 80, 50))
            button1.title = "点击一下试试"
            button1.alternateTitle = "欢迎再次点击"
            view.addSubview(button1)
            button1.state = NSControl.StateValue.on
            button1.bezelStyle = .rounded
            button1.setButtonType(NSButton.ButtonType.radio)
            button1.image = NSImage(named: "42.png")
            button1.alternateImage = NSImage(named: "39")
            
            button1.target = self
            button1.action = #selector(buttonClicked(sender:))
            button1.tag = 10
            
            
            let imageView = NSImageView(frame: NSMakeRect(20, 150, 40, 40))
            view.addSubview(imageView);
            imageView.image = NSImage(named: "44.png")
            imageView.animates = true
            imageView.isEditable = true
    //        imageView.allowsCutCopyPaste = true
            /*
             NSImageFrameNone = 0,
             NSImageFramePhoto,
             NSImageFrameGrayBezel,
             NSImageFrameGroove,
             NSImageFrameButton
             */
            imageView.imageFrameStyle = .photo
            
            //imageview 默认的animation 是 true
            imageView.animates = true
            
            //拖拽效果,苹果推荐使用nsbutton
            
            imageView.target = self
            imageView.action = #selector(clickImageview(_:))
            
            //用户行为操作
            /*1,imageview 上方添加一个按钮*/
            
            /*2 手势操作*/
           let clickGes = NSClickGestureRecognizer(target: self, action: #selector(clickImageViewFor1(_:)))
            GesImageView.addGestureRecognizer(clickGes)
            
            /*3 自定义nNSImageView 重写方法*/
            
            MyImageV.target = self
            MyImageV.action = #selector(clickMyOwnImagView)
            
        }
        @objc func clickMyOwnImagView(){
            print("点击了自定义的imagView")
        }
        @objc func clickImageViewFor1(_ view1:NSControl) -> Void {
            print("使用手势来处理")
        }
        @IBAction func ClickImageAction(_ sender: NSButton) {
            print("点击图片按钮了")
        }
        @objc func clickImageview(_ view:NSImageView) -> Void {
            print("其它文件图片已经拖拽到文件筐里了")
        }
        @objc func buttonClicked(sender : NSButton) -> Void {
            print("Click button")
        }
    

    约束添加,中间有一部分控件是从故事版拉过来的

     mybox.translatesAutoresizingMaskIntoConstraints = false
    //        NSLayoutAnchor
            let myViewConts = [
                mybox.topAnchor.constraint(equalTo: view.topAnchor, constant: 20),
                mybox.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 20),
                mybox.heightAnchor.constraint(equalToConstant: 20),
                mybox.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20)
                
            ]
            NSLayoutConstraint.activate(myViewConts)
            mybox.layer?.backgroundColor = NSColor.red.cgColor
    
            //关闭之前的试图约束
            blueTf.translatesAutoresizingMaskIntoConstraints = false
            //添加约束
            let blueTfConts = [
                blueTf.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -20),
                blueTf.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: -50),
                blueTf.heightAnchor.constraint(equalToConstant: 80),
                blueTf.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 100)
            ]
            //激活约束
            NSLayoutConstraint.activate(blueTfConts)
            //设置背景色
            blueTf.layer?.backgroundColor = NSColor.blue.cgColor
    

    3,点击按钮全屏

      	let window1 = self.view.window
             window1?.toggleFullScreen(window1)
    

    4,NSCollectionView 实现流布局
    (1),注册单元格,或者头部视图

    let headerId :String? = "BOB_Header"
    class SevenVc: NSViewController {
    //
        @IBOutlet weak var myCollectionView: NSCollectionView!
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do view setup here.
            //注册NSCollectionView的Items
           myCollectionView.register( MyCollectionViewItem.self, forItemWithIdentifier: NSUserInterfaceItemIdentifier(rawValue: "ADC"))
            
            //headerView 或者 footerView需要维护
            let headNib = NSNib(nibNamed: "HeadView", bundle: nil)
            myCollectionView.register(headNib, forSupplementaryViewOfKind: (NSCollectionView.elementKindSectionHeader), withIdentifier: NSUserInterfaceItemIdentifier(headerId ?? ""))
            
            (myCollectionView.collectionViewLayout as! NSCollectionViewFlowLayout).sectionHeadersPinToVisibleBounds = true
            
        }
        
    }
    

    (2),遵守NSCollectionViewDelegate 和NSCollectionViewDataSource 协议,并且实现协议方法

    //数据源
    extension SevenVc:NSCollectionViewDataSource{
        //返回每个section中单元格个数
        func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
            return 20
        }
        //section个数
        func numberOfSections(in collectionView: NSCollectionView) -> Int {
            return 2
        }
        
    //    func collectionViewItem 的样式
        func collectionView(_ collectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {
            let item = collectionView.makeItem(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "ADC"), for: indexPath) as! MyCollectionViewItem
            var imageName:String = "39.png"
            switch ((indexPath.item) % 3) {
            case 0:
                imageName = "39.png"
                break
            case 1:
                    imageName = "42.png"
                    break
            case 2:
                    imageName = "44.png"
                    break
                
            default:
                imageName = "39.png"
                break
            }
    //        let image = NSImage(named: <#T##NSImage.Name#>)
    //        item.mimageView.image = NSImage(byReferencingFile: imageName)
            item.mtitleLab.stringValue = "\(indexPath.item)"
            return item
        }
        //headview和footerView的操作
        func collectionView(_ collectionView: NSCollectionView, viewForSupplementaryElementOfKind kind: NSCollectionView.SupplementaryElementKind, at indexPath: IndexPath) -> NSView {
            let headView = collectionView.makeSupplementaryView(ofKind: NSCollectionView.elementKindSectionHeader, withIdentifier: NSUserInterfaceItemIdentifier(headerId ?? ""), for: indexPath) as! HeaderView
            headView.TitleLab.stringValue = "\(indexPath.section)"
            return headView
        }
        
        
    }
    
    //代理的操作
    extension SevenVc:NSCollectionViewDelegate{
        //选中操作
        func collectionView(_ collectionView: NSCollectionView, didSelectItemsAt indexPaths: Set<IndexPath>) {
            print("选中操作 ")
        }
        
        //取消选中操作
        func collectionView(_ collectionView: NSCollectionView, didDeselectItemsAt indexPaths: Set<IndexPath>) {
            print("取消选中")
        }
        
    }
    
    

    5 NSAlert 和 NSPopover 提示的使用

    import Cocoa
    
    class TwoVc: NSViewController {
        var popVc:NSWindowController?
        
        @IBOutlet weak var btn1: NSButton!
        @IBOutlet weak var btn2: NSButton!
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do view setup here.
            btn1.target = self
            btn1.action = #selector(showAlert1)
            btn2.target = self
            btn2.action = #selector(showPopOver)
            
        }
        @objc func showPopOver(){
            let popOver = NSPopover()
            //从故事版加载控制器
            let popoverVc = NSStoryboard(name: "Two", bundle: nil).instantiateController(withIdentifier: "popOverVc") as! NSViewController
            //设置内容控制器
            popOver.contentViewController = popoverVc
            
            popOver.delegate = self
            
            /*
             case applicationDefined 默认值,不会关闭
             
             case transient 点击窗口以外会关闭
             
             case semitransient  点击esc 消失
             
             */
            popOver.behavior = .semitransient
            /*
             显示popover
             relativeTo:popover 三角箭头指向的边界
             of:说明第一个控件的父控件
             preferredEdge:四条边的那一条边界
             */
            popOver.show(relativeTo: view.bounds, of: view, preferredEdge: NSRectEdge.maxY)
            
        }
        @objc func showAlert1(){
            let alert = NSAlert()
            alert.messageText = "提示警告"
            alert.informativeText = "显示提示框详细内容"
            alert.icon = NSImage(named: "warn")
            alert.addButton(withTitle: "按钮1")
            alert.addButton(withTitle: "按钮2")
            let btns = alert.buttons
            for btn in btns {
                print(btn.title)
            }
            
            //代理方法,实现z帮助内容
            alert.delegate = self
            alert.showsHelp = true
            alert.helpAnchor = "帮助内容"
            
            //辅助视图
            alert.layout()
            let imgV = NSImageView(frame: NSMakeRect(0, 0, 100, 100))
            imgV.image = NSImage(named: "beauty")
            alert.accessoryView = imgV
            
            alert.showsSuppressionButton = true
            alert.suppressionButton?.title = "是否不再提示"
            
            
            //关联窗口显示
            alert.beginSheetModal(for: view.window!) { (result) in
                if result == NSApplication.ModalResponse.alertFirstButtonReturn {
                                print("点击了btn1")
                            }
                //是否选中
                print(alert.suppressionButton?.state)
            }
            //独立窗口显示
    //        let result = alert.runModal()
    //        if result == NSApplication.ModalResponse.alertFirstButtonReturn {
    //            print("点击了btn1")
    //        }
        }
        
    }
    //NSAlertDelegate
    extension TwoVc:NSAlertDelegate{
        //return false 表示代理自己处理,否则就是系统自己处理
        func alertShowHelp(_ alert: NSAlert) -> Bool {
            //一般跳转帮助页面来提示
            print("点击了帮组选项")
            return false
        }
    }
    
    //NSPopoverDelegate
    extension TwoVc:NSPopoverDelegate{
        //根据返回值确认窗口是否可以关闭
        func popoverShouldClose(_ popover: NSPopover) -> Bool {
            print("想要关闭窗口")
            return true
        }
        func popoverDidShow(_ notification: Notification) {
             print("显示了")
        }
        func popoverDidClose(_ notification: Notification) {
             print("已经关闭窗口")
        }
        func popoverWillShow(_ notification: Notification) {
             print("将要显示")
        }
        func popoverWillClose(_ notification: Notification) {
             print("将要关闭窗口")
        }
        //支持鼠标拖动
        func popoverShouldDetach(_ popover: NSPopover) -> Bool {
            return true
        }
        func popoverDidDetach(_ popover: NSPopover) {
            print("拖动")
        }
        //拖动时候变成独立window
        func detachableWindow(for popover: NSPopover) -> NSWindow? {
            popVc = NSStoryboard(name: "Two", bundle: nil).instantiateController(withIdentifier: "popwindowVc") as! NSWindowController
            return popVc?.window
        }
    }
    
    

    5,NSMenu菜单使用
    (1).app菜单:系统会提供一个默认的菜单
    (2).控件右侧显示菜单:应用本身提供一些快捷操作选项,控件左侧也有但是很少用
    (3).Dock栏上菜单,系统有默认选项,用户可以自己添加
    (4).使用故事板 MainStoryBoard 会有默认menu 可编辑
    (5).在StoryBoard的ViewController最上方bar上添加,编辑

    //
    //  ThreeVc.swift
    //  MyMacOsApp1
    //
    //  Created by syStudio sy on 2019/6/3.
    //  Copyright © 2019 syStudio sy. All rights reserved.
    //
    
    import Cocoa
    
    /*
     1。app菜单:系统会提供一个默认的菜单
     2,控件右侧显示菜单:应用本身提供一些快捷操作选项,控件左侧也有但是很少用
     3.Dock栏上菜单,系统有默认选项,用户可以自己添加
     
     
     */
    class ThreeVc: NSViewController {
    
        @IBOutlet weak var leftBtnMenu: NSButton!
        @IBOutlet weak var rightBtnMenu: NSButton!
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do view setup here.
            rightBtnMenu.target = self
            rightBtnMenu.action = #selector(showRightMenue)
            
            leftBtnMenu.target = self
            leftBtnMenu.action = #selector(showLeftMenue)
            
            //添加系统菜单栏Item
            addAppMenueItem()
        }
        @objc func showRightMenue(){
            let rightMenue = NSMenu(title: "菜单")
            let item = NSMenuItem(title: "功能1", action: #selector(clickItems(Sender:)), keyEquivalent: "")
             let item1 = NSMenuItem(title: "功能2", action: #selector(clickItems(Sender:)), keyEquivalent: "")
             let item2 = NSMenuItem(title: "功能2", action: #selector(clickItems(Sender:)), keyEquivalent: "")
            
            rightMenue.addItem(item)
            rightMenue.addItem(item1)
            rightMenue.addItem(item2)
            //给右键菜单f
            rightBtnMenu.menu = rightMenue
            
        
        }
        @objc func clickItems(Sender:NSMenuItem) -> Void {
            print("\(Sender.title)")
        }
        //添加左键菜单
        @objc func showLeftMenue(){
            let menu  = NSMenu(title: "左键")
            let item = NSMenuItem(title: "功能1", action: #selector(clickItems(Sender:)), keyEquivalent: "")
             let item1 = NSMenuItem(title: "功能2", action: #selector(clickItems(Sender:)), keyEquivalent: "")
             let item2 = NSMenuItem(title: "功能3", action: #selector(clickItems(Sender:)), keyEquivalent: "")
            menu.addItem(item)
            menu.addItem(item1)
            menu.addItem(item2)
            //绑定事件
            NSMenu.popUpContextMenu(menu, with: NSApp.currentEvent!, for: leftBtnMenu)
            
        }
        //在app菜单栏添加
        func addAppMenueItem() -> Void {
            //1.获取app菜单
            let menu = NSApp.mainMenu
            //2.创建item
            let myMenue = NSMenu(title: "MyMenue")
            let item1 = NSMenuItem(title: "我的设置", action: #selector(clickItems1(Sender:)), keyEquivalent: "")
            //添加z到我的菜单
    //        myMenue.addItem(item1)
           
            //将我们的菜单项添加到主菜单
            let mFirstItem = menu?.items.first
            //这样添加会覆盖,就是重新生成一个新菜单
    //        mFirstItem?.submenu = myMenue
            mFirstItem?.submenu?.insertItem(item1, at: 0)
        }
        
        
       
        
    }
    extension ThreeVc{
    
    @objc func clickItems1(Sender:NSMenuItem) -> Void {
        print("\(Sender.title)")
    }
    }
    
    
    展开全文
  • 本文主要给大家介绍几个Mac开发中值得收藏的三方控件,有些是经过自己改造的,这也主要源于在实习期间,做了几个月的Mac开发,在开发期间也收集和改造了一些三方的控件。

    Mac OS X开发者值得收藏的开发资源

    本文主要给大家介绍几个Mac开发中值得收藏的三方控件,有些是经过自己改造的,这也主要源于在实习期间,做了几个月的Mac开发,在开发期间也收集和改造了一些三方的控件,下面详细介绍一下:

    JWCTableView

    首先就是TableView,在iOS开发中最常用的就是UITableView,在Mac上想要实现跟UITableView一样的效果,基本的NSTableView是很难是满足的,这里给大家介绍一个三方的TableView - JWCTableView,这也是我在github上寻找了很久找到了,基本功能也是比较完善的,其中最主要的就是实现可分组的TableView,用起来跟UITableView一样,非常方便。

    效果如下:
    这里写图片描述

    这个也是经过我改造过的版本,加入了右键显示菜单的功能,鼠标点击判断等等,也完善了一些NSTableView的固有方法,大家可以下载使用。
    源码地址:JWCTableView

    SFBPopover

    相信popover的使用大家都不陌生,但是在Mac OS X上面,NSPopover的可变性非常小,也只是提供了基本的显示,关闭功能,至于如何修改arrow位置,大小,popover显示的方向,这些都是无法改变的,因此,给大家推荐一个自定义程度相对较高的SFBPopover,能够很好的满足需求。

    效果如下:
    这里写图片描述

    这里只是突出了arrow的位置可变,这个也是经过我改造后的效果,可以根据点击的位置,设置arrow的显示位置,大家可以下载使用。
    源码地址:SFBPopover

    RFOverlayScrollView

    看到这个名字,相信大家已经想到是跟ScrollView有关,在Mac开发过程中,有时候会出现Scroller一直显示,而且底部有色块的情况,这个时候就可以使用RFOverlayScrollView来解决,主要是实现Scroller自动显示,隐藏的,效果比系统的SrcollView要好。

    效果如下:
    这里写图片描述

    具体的大家可以下载源代码使用。
    源码地址:RFOverlayScrollView

    CalendarDatePicker

    这里主要是介绍一个DatePicker控价,也是Mac客户端上选择时间的效果,以下是Mac原生应用日历的时间选择效果:

    这里分别是点击前和点击后的效果:
    这里写图片描述这里写图片描述

    下面是经过改造后放置在TableViewCell中的效果:虽然效果不太一样,但基本的实现过程是一样的,大家也可以下载源码,然后自己修改,实现自己想要的效果。
    这里写图片描述

    源码地址:CalendarDatePicker

    ITProgressIndicator

    如果大家对系统的NSProgressIndicator的功能不满意,不妨试试这个,ITProgressIndicator的自定义程度高,可以修改线条的数量,宽度,颜色等,使用起来很方便。

    源码地址:ITProgressIndicator

    总结

    本文主要给大家介绍了Mac开发中比较常用的一些三方控件,对于初次做Mac应用的开发者比较适用,这些都很值得收藏,github上也有项目资源合集,欢迎大家收藏,有什么不足也请互相交流。

    展开全文
  • 在storyboard中,segue有几种不同的类型,在iphone和ipad的开发中,segue的类型是不同的。...而在ipad中,有push,modal,popover,replace和custom五种不同的类型。     modal 模态转换

    storyboard中,segue有几种不同的类型,在iphoneipad的开发中,segue的类型是不同的。

    iphone中,segue有:pushmodal,和custom三种不同的类型,这些类型的区别在与新页面出现的方式。

    而在ipad中,有pushmodalpopoverreplacecustom五种不同的类型。

     

     

    modal 模态转换

     

    最常用的场景,新的场景完全盖住了旧的那个。用户无法再与上一个场景交互,除非他们先关闭这个场景。

    是在viewController中的标准切换的方式,包括淡出什么的,可以选切换动画。

    Modalview:就是会弹出一个view,你只能在该view上操作,而不能切换到其他view,除非你关闭了modalview.

    Modal View对应的segue type就是modal segue

    *Modal:Transition to another scene for the purposes of completing a task.user在弹出的modalview里操作完后,就应该dismiss the modal view scene然后切换回the originalview.

     



    push


    Push类型一般是需要头一个界面是个Navigation Controller的。

    是在navigation View Controller中下一级时使用的那种从右侧划入的方式

    *Push:Create a chain of scenes where the user can move forward or back.segue type是和navigation viewcontrollers一起使用。

     

     

    popover(iPad only)

     

    popover 类型,就是采用浮动窗的形式把新页面展示出来

    *Popover(iPad only):Displays the scene in a pop-up “window” over top of the current view.

     

     

    *Replace (iPad only):

     

    替换当前scene

    Replace the current scene with another. This is used in some specialized iPad viewcontrollers (e.g. split-view controller).

     

     

    custom


    就是自定义跳转方式啦。

    *Custom:Used for programming a customtransition between scenes.

    Storyboard中使用自定义的segue类型

    http://ryan.easymorse.com/?p=72

     

     



    代码执行segue

     

    目前所知道的情况,Push型的Segue必须拥有Navigation Controller

    在StoryBoard中建立的Segue,是直接跳转的,不方便添加额外的条件判断,如果要做登录之类的功能,必须动态执行Segue操作

     

    首先在StoryBoard中建立Segue,不从按钮等控件建立,而是从ViewController建立(这样的话必须指定Identifier)

    建立完毕后,使用代码:

    [self performSegueWithIdentifier:@"segueXXX" sender:self];
    

    利用Identifier指定要执行的Segue.






    参考资料:

     

    使用StoryBoard:用Segue传递数据

    http://www.cnblogs.com/mybkn/archive/2012/03/22/2411842.html 

     

    WWDC2011视频之Introduction to Storyboarding摘要

    http://blog.sina.com.cn/s/blog_834f346f0100s4jr.html

     

    storyboard 遇到一个segue的问题

    http://www.cocoachina.com/bbs/simple/?t92552.html

     

    iOS: storyboard (2)

    http://blog.csdn.net/totogogo/article/details/7361191


    IOS开发教程:Storyboard全解析

    http://www.dasheyin.com/ios_kai_fa_jiao_cheng_storyboard_quan_jie_xi_-_di_yi_bu_fen.html


    IOS中@class和import两种引用文件的区别

    http://www.devdiv.com/home.php?mod=space&uid=65729&do=blog&id=10905


    Storyboard的简单使用

    http://my.oschina.net/plumsoft/blog/53886

    展开全文
  • mac OS Big Sur 11 Beta 4发行说明 更新您的应用程序以使用新功能,并针对API更改测试您的应用程序。 总览 macOS 11 SDK支持为运行macOS Big Sur 11的Mac开发应用程序。该SDK与Xcode 12 beta 4捆绑在一起,可从Beta...
  • 这篇文章主要是关于如何用swiftUI优雅地现在menuBar的popover。 最终效果图: 创建Popover 在AppDelegate文件中,声明一个NSPopover变量(下面的statusBarItem之后会用到) var popover: NSPopover! var ...
  • UI 下拉刷新 EGOTableViewPullRefresh – 最早的下拉刷新控件。 SVPullToRefresh – 下拉刷新...MJRefresh – 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。...X
  • UI  下拉刷新  EGOTableViewPullRefresh - 最早的下拉刷新控件。 SVPullToRefresh - 下拉刷新控件。 MJRefresh - 仅需一行代码就可以为UITableView或者CollectionView加上下拉刷新或者上拉刷新功能。...
  • 目录 UI 下拉刷新模糊效果AutoLayout富文本图表表相关隐藏与显示HUD与Toast对话框其他UI ...Model其他数据库缓存处理PDF图像浏览及处理摄像照相视频音频处理响应式框架消息相关 ...版本新API的Demo代码
  • Mac OS是Unix系统的分支,有着强大的命令行功能。很多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功能讲述一下。 终端设置 Mac的终端有一个很关键的配置,就是“使用 Option 键作为 Meta 键...
  • 登录 | 注册 Mackerelz的博客 目录视图摘要视图订阅 2016软考项目经理实战班 学院周年礼-顶尖课程钜惠呈现 有奖征文:在云上开发的无限可能  【博客专家】有奖试读—Windows ...关闭
  • UIKit

    2018-06-27 14:24:04
    iOS UIKit框架1. 简介:UIKitk框架提供一系列的Class(类)来建立...(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在iOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的没啥太...
  • iOS UIKit框架

    2019-06-27 21:55:37
    1. 简介: UIKitk框架提供一系列的Class(类)...(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在iOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的没啥太大区别(我没有说实...
  • Mac OS是Unix系统的分支,有着强大的命令行功能。很多事情在命令行下处理会事半功倍,所以我就iOS程序员可能会用到的功能讲述一下。 终端设置 Mac的终端有一个很关键的配置,就是“使用 Option 键作为 Meta 键”...
  • UIKit框架解读

    2016-05-24 09:25:01
    简介: UIKitk框架提供一系列的Class(类)...(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在IOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的没啥太大区别(我没有说实现目的
  • iOS、mac开源项目及库

    2015-04-29 16:58:02
    目录 UI 下拉刷新模糊效果AutoLayout富文本图表表相关隐藏与显示HUD与Toast对话框其他UI 动画 侧滑与右滑返回手势其他...Model其他数据库缓存处理PDF图像浏览及处理摄像照相视频音频处理响应式框架消息相关 ...
  • 1. 简介: UIKitk框架提供一系列的Class(类)来建立和...(PS1: 可以认为是操纵界面的一个API库)(PS2: UIKit框架是用在IOS平台上与之对应的是MAC OS X上的Application Kit,二者是姐妹框架,作用和目的没啥太大区别(我
1 2 3 4 5 ... 20
收藏数 665
精华内容 266
关键字:

mac os popover