話は、私がMac OS X用のアプリケーションを書く必要があるという事実から始まりました。デスクトップやMac OS Xの開発に関する記事を見る機会はますます少なくなっていますが、このトピックはそれに関するものです。
私はすでにQTで多くのことを書いており、ここでのタスクはCocoaのみを使用することでした。
アップル製品の周りには神聖さのオーラがありますが、私はMacBookから単純にその下に落ちました。 どこにでもある小さなものを除いて、ユーザーインターフェースに特別な問題はないように思えました(ああ、私がどれほど間違っていたか)。
このプロジェクトでは、ユーザーインターフェイスの開発に着手しましたが、ここではクラシックなタブビューテンプレートが必要でした。 カットの下で既に読み続けてください。
背景
一般に、プロジェクトはユーザーインターフェイスの観点から最も一般的です。 ユーザーは接続ボタンをクリックし、サーバーに入るためのデータを入力し、[OK]をクリックすると、このサーバーのタブが表示されます。 多くのサーバーにログインでき、それらは異なるタブにあります。 どの種類のサーバーで、なぜこれがすべて必要なのかは、この記事に関係のない別のサブジェクトエリアであるため、この情報をもう一度伝えることができます。
素朴な開発者
Mac OS Xでも、iOSでも、まだ開発したことがありません。これが私の最初の経験です。これが私をさらに素朴にしたのかもしれません。
それよりもすべてがシンプルだと思ったので、タブビューコンストラクターまたはそれをウィンドウ内のCocoaで呼び出されるものにスローし、表示を調整しますが、それはありませんでした。
私はXcodeタブビューに行き、ウィンドウに投げてこれを見る

ここでは、すでにいくつかの困難が生じる可能性があるという疑念がありました。
さて、私はタブ用の他のウィジェットを探し始めました、それらはそこにありません。 さて、このタブビューの設定を理解することにしました。 設定をいじくり回し、同じSafari / Finder / Xcodeなどのタブの種類にタブビューを変更することで、それをもたらすことができないことに気付き、インターネットの無限の広がりを探しに行きました。
http://stackoverflow.comの投稿の最初のいくつかのビューで、タブビューが必要なものではなく、私だけではないことが明らかになりました。
代替ソリューションを検索する
その後、コードの1行ではなく、大量のテキストが読み取られ、大量のコーヒーが飲まれる開発の瞬間が訪れました。
最初はまだApple自体から何かを見つけようとしましたが、すぐに役に立たないことが明らかになりました。
次に、この問題が議論されたさまざまなフォーラムとその解決方法に行きました。 かなり早く、Mac OS Xでアプリケーションにタブを追加するためのいくつかのオプションをすでに見つけました。
- PSMTabBarControl
- MMTabBarView
- いくつかの例は、 cocoacontrols Webサイトで見つけることができます。
- stackoverflowで何かが提供されていました。
- github.com/aaron-elkins/ENTabBarView
- www.cocoacontrols.com/controls/litabcontrol
- www.cocoacontrols.com/controls/kpctabscontrol
最初の2つのオプションは最も一般的で、多くの機能を備えていたため、それらに対処することにしました。
PSMTabBarControlは、優れた機能を備えたかなり開発されたプロジェクトですが、長い間サポートされていません。 ちなみに、彼はAdiumで使用されています。
MMTabBarViewは基本的にPSMTabBarControlの継続および開発ですが、それにもかかわらず、そのサポートは優れています。
githubで彼のページを見ると、彼は44のフォークを持っています。これは、開発者が開発のためにいくつかの改善を行ったものの、開発者が既に1年間masterブランチに何もコミットしていないためです(しかし、気づいている人は少ないようです)。
44のフォークとその中のいくつかのアクティブなフォークは、最後のコミットをmasterに残し、いくつかのバグを修正したと主張しています。
それから私は他のものよりも積極的にサポートされているものを採用することにしました。
フォークの1つが選択されました(後で判明したように、どちらのフォークでも構いません)。
MMTabBarViewには、問題なくコンパイルされて機能するデモプロジェクトがあります。

それから私はすべてがうまく、フォークが生きていて、あなたがそれで働くことができると思いました。
私は自分のプロジェクトのアセンブリにフレームワークを含め、すべての設定を行い、必要なコードを書きましたが、始めましたが何もしませんでした。 タブはありません!
行き止まり
タブはありません。わかりました。タブビューを更新しないとタブに似たものが表示されることがわかりました。

たとえば、タブを追加すると、すべてが消えます

これが楽しみの始まりです。 私は可能なすべてのことを試み始めました。まずはすべての妥当な手段で、それから妥当でない手段を試しました。
- 異なるフォーク。 約3〜4個のフォークを整理する必要がありました。
- 設定 別の設定を試しました。
- 新しいプロジェクトを作成し、その中のすべてを異なるフォークで試しました。
- githubと検索で、MMTabBarViewを使用しているプロジェクトを見つけ、それらを処理しました。 私は自分のコードとの違いを探していました。
- このテーマに関するインターネット上のフォーラムを掘ります。
一般に、多数の実験には1日以上かかりました。
最終的に、2つのプロジェクトがありました。ほとんど空で、まったく同じです。 タブは一方では機能しますが、もう一方では機能しません。 そのような不可解なものとの出会いにより、私たちの先祖は超自然を信じ始めました。
別のライブラリを探す必要があるという考えが生じ始めました。
交響詩orかむしろ運
その結果、理解できない問題を長時間検索した後、MMTabBarViewを使用して最も単純で最小のプロジェクトをgithubで見つけ、それを私のものと比較することにしました。
いくつかの小さなブラウザが見つかりました。 余分なものをすべて削除し、プロジェクトと比較し始めました。 すべてが同じでした。 また、さまざまなフォークのMMTabBarViewアセンブリを問題なく使用しました。
その後、この作業プロジェクトで新しいウィンドウを作成し、その中のタブを接続しようとするアイデアが生まれました。
そして、勝利、タブは機能しませんでした。 そして今、1つのプロジェクトがあり、1つのxibファイルを持つタブはありません。
結論は明らかでした。これらのファイルを比較する必要があります。
ここで動作します:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6751" systemVersion="13F1603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" promptedForUpgradeToXcode5="NO">
ここでは機能しません:
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6751" systemVersion="13F1603" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
最初のタグで問題が見つかりました:
customObjectInstantitationMethod="direct"
この属性を削除すると、MMTabBarViewが正常に動作し始めます。
どうやらこれはMMTabBarViewの描画がCustomViewだけで行われ、この属性が何らかの形でそれに影響を与えるという事実によるものです。
それが何であるかを理解し始めます:

GoogleとYandexは、インデックス化されたxibファイルへの多数のリンクを提供します。
他の問題に関連するこの属性への参照をいくつか見つけましたが、それでもまだ理解できませんでした。 誰かがこの属性が何であり、なぜそれが必要であるかを知っているなら、それを書き留めてください、私は非常に感謝します。
おわりに
MMTabBarViewは非常に優れたプロジェクトで、さまざまなタブ、タブのカウンター、アイコンの追加、閉じるボタンの追加、新しいタブの追加などをサポートしています。 彼がフォークの束に広がっているのは残念であり、それをどのように組み合わせるかは現時点では明確ではありません。
もちろん、Appleは私を苦しめましたが、これはどうすれば、すべてのアプリケーションにユーザーインターフェイス要素がありますが、ライブラリにはありません!?
面白いことに、Xcodeにはタブがあります:)
PS
MMTabBarViewをプロジェクトに接続する方法の簡単な例を次に示します。
便利なリンク:
stackoverflow.com/questions/27354262/safari-style-tabs-cocoa-control?rq=1
stackoverflow.com/questions/2774668/does-anyone-know-a-safari-style-tab-control-for-mac-os-x-applications?rq=1
stackoverflow.com/questions/22789341/better-psmtabbarcontrol-cocoa-tabs
stackoverflow.com/questions/4986920/tabs-style-in-the-cocoa?rq=1