日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MacOS-MacAPP使用Main.storyboard启动视图程序踩坑

發(fā)布時間:2023/12/8 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MacOS-MacAPP使用Main.storyboard启动视图程序踩坑 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

由于主做移動端APP的iOS開發(fā),對于Mac端的APP開發(fā)較少,我也本以為,簡單的以為會和iOS差不多

雄赳赳,氣昂昂

沒想到啊,真是沒想到啊,帥不過3秒!!!尷尬!!!

在程序視圖啟動入口處就掛了,踩了一些坑,創(chuàng)建macOS項目步驟我就不再介紹了,可參考博文

本人使用OC創(chuàng)建的macOS項目,勾選了storyboard,創(chuàng)建好項目之后,界面如下:

在可視化編輯器中看到的東西。有三個主要區(qū)域,每個在 Document Outline 中也有相應的文本表示:

  • Application Scene:菜單欄和項目。
  • Window Controller Scene:配置窗口行為。
  • View Controller Scene:UI 元素所在的地方

?

一、坑一:刪除ViewController自定義Controller,運行APP還是空白window

默認有ViewController.h和ViewController.m以及Main.storyboard文件,看storyboard視圖區(qū)域會發(fā)現(xiàn)程序入口AppDelegate默認指向WindowController,WindowController指向ViewController,最終展示的是ViewController上的視圖,可參考看上圖,也可通過運行APP查看圖層也可驗證

博主習慣性的刪除了ViewController文件,然后自己創(chuàng)建了自定義MainViewController,并在上面添加了一些UI,發(fā)現(xiàn)啟動APP還是展示以前的空白window,雖然刪除了ViewController文件,但其實指向還是指向ViewController,因此我們需要改變指向,如下:
通過最右邊的inspector面板區(qū)域Identity選項;Identity: 如果控件使用自定義的類,需要從Class下拉列表中選擇

選中自定義的MainViewController,這時Main.storyboard的UI就和controller關(guān)聯(lián)起來了,在運行就是展示MainViewController上的視圖

?

二、坑二:Main.storyboard中Window關(guān)聯(lián)不了AppDelegate

我想在AppDelegate中關(guān)聯(lián)上Main.storyboard中的主Window,發(fā)現(xiàn)怎么都關(guān)聯(lián)不上,查看storyboard區(qū)域視圖發(fā)現(xiàn)其window指向WindowController的

指向也可看出其關(guān)聯(lián)類

?

三、坑三:刪除Main.storyboard,使用自定義創(chuàng)建的XIB文件

刪除了Main.storyboard文件之后,運行直接報錯'Could not find a storyboard named 'Main' in bundle NSBundle;只好將其還原回去

?

因為在項目中指定了?程序啟動視圖主界面為Main.storyboard;我們可以自定義一個MainMenu.xib文件,在General----Deployment Info----Main Interface,指定MainMenu.xib;這時在運行就會發(fā)現(xiàn)程序啟動主界面就是MainMenu.xib上的UI

這個時候我們就可以將Window關(guān)聯(lián)上AppDelegate了;其界面和Main.storyboard相比就沒那么豐富了,就單純的查看自己界面屬性

這個時候不管我們使用Main.storyboard還是自定義的MainMenu.xib文件加載主界面都是可以的

通過Main.storyboard初始化界面,加載主界面

通過自定義MainMenu.xib文件初始化界面,加載主界面

?

綜上,也總結(jié)了一下MacOS開發(fā)和iOS開發(fā)的一些區(qū)別:

具體區(qū)別也可參考博文MacOS-MAC 開發(fā)和IOS開發(fā)不同之處(純代碼)

MacOS開發(fā)常用的控制器為NSWindowController,而不是iOS里面的ViewController,因為mac app大多數(shù)為多窗口,而iOS app上只有一個主窗口,更多數(shù)的情況下我們是在ViewController做操作,顯示各個不同的頁面,而且UI控件大部分以UI開頭,而MacOS開發(fā)剛好相反,UI控件基本上Main.storyboard是以NS開頭,每個NSWindowController 的xib都包含一個NSWindow和一個NSView。

由于MacOS開發(fā)學習資料較少,目前就在網(wǎng)上下載的很多demo來看,發(fā)現(xiàn)大部分都用的是xib,使用storyboard的都比較少,除了少部分的純代碼手寫除外!

MacOS開發(fā)的坐標系也與iOS開發(fā)的坐標系不同,MacOS開發(fā)的坐標系的原點在XY坐標系的左下角,而iOS開發(fā)的坐標系的原點是在XY坐標系的左上角開始的。當然了,你要是不習慣的話可以強制性修改它的坐標系,如:通過覆蓋視圖的isFlipped方法,強制視圖坐標系原點為左上角位置.

方法名稱為:- (BOOL)isFlipped{return YES;} 一般聲明某個控件在窗口的位置用NSMakeRect(0, 0, 110, 110)或者CGRectMake(0, 0, 110, 110)中;

在MacOS 開發(fā)中視圖本身沒有提供背景顏色,邊框,圓角等屬性。但是可以利用layer屬性來控制這些效果,使用這些屬性之前必須設(shè)置其屬性wantsLayer為YES。這一點就相對于沒有iOS開發(fā)要方便的多,當然還可以通過重繪的方法來實現(xiàn)這些效果- (void)drawRect:(NSRect)dirtyRect

在MacOS開發(fā)中一般以NSWindow為窗口,如果要實現(xiàn)跳轉(zhuǎn)顯示另一個窗口需要關(guān)閉當前窗口,然后顯示下一個窗口

?

總結(jié)

以上是生活随笔為你收集整理的MacOS-MacAPP使用Main.storyboard启动视图程序踩坑的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。