2016-10-14 10 views
2

Xcode 8のウィザードで作成されたNSDocuments &ストーリーボードアプリがあります.ViewControllerシーンにはNSTextViewが追加されています。一部のメニュー項目は無効になっています(太字や斜体など)。NSTextViewに下線を付けることができますが、太字ではありません

最初のレスポンダーを見ると、太字と斜体のアクションはありません。私は自分でこれらの方法を書いていますか?レスポンダーチェーンが正しく設定されていないためですか?下線はなぜ表示されますか太字ではありませんか?

編集:イメージを追加してインスペクタバーでテキストを編集する方法を表示しますが、[書式]メニューには私が期待するコマンドは表示されません。

Image showing how I can modify text with the Inspector Bar, but not with the menu, apart from Underlining

+0

「特定のメニュー項目が無効になっています」ということはどういう意味ですか?これらのメニュー項目はどこですか? – rocky

+0

アプリケーションのメインメニューでは、ウィザードで作成されたものが表示されます。エントリは、書式/フォントの下にあります。 – Henrik

+0

NSText APIを見ると、下線を付ける方法があるようですが、太字やイタリック体のテキストではフォントファミリを変更する必要があります。それはおそらくそれです。 – Henrik

答えて

6

この問題の歴史的(?)な理由があります。 メインメニューがxibファイルで作成されたとき、xibファイルにはNSFontManagerインスタンスが自動的に含まれ、太字のようなメニュー項目が接続されていました。 しかし、現代のストーリーボードでは、プリセットされたNSFontManagerインスタンスはありません。

次に、以下の手順に従って手動でFontManagerに接続できます。

  1. アプリケーションシーンで通常のオブジェクトインスタンス(青い立方体)を作成します。
  2. ObjectインスタンスのクラスをNSFontManagerに変更します。 enter image description here
  3. メニュー項目をfontManagerのaddFontTrait(_:)アクションに接続します。同様に、「Bigger」と「Smaller」の項目をmodifyFont(_:)に接続します。 enter image description here

menuItemsタグも設定する必要がありますが、実際には既に設定されています。 menuItemのタグが0の場合にのみ、対応するタグも手動で設定します。

+0

写真でさえ優れた説明。どうもありがとう。 – Henrik

+0

ああ、ここで見つけたhttps://developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW17こことhttps ://developer.apple.com/library/content/documentation/TextFonts/Conceptual/CocoaTextArchitecture/FontHandling/FontHandling.html#//apple_ref/doc/uid/TP40009459-CH5-SW11 –

0

メニュー項目から最初のレスポンダーにドラッグすると、メニュービューで同じオプションが表示されます。単にCtrlをクリックします。次に、接続したばかりの関数を実装します。 File> NewをnewDocumentに接続し、ViewControllerに実装した場合

func newDocument(_ sender: Any?){ 
    print("func newDocument(_ sender: Any? \(String(describing: sender)))") 
} 

これが呼び出されます。 First ResponderはNSFontManagerをクラスとして追加したObjectと同じメソッドをすべてリストします。メソッドの前に@IBActionを使っていないので接続しません。

関連する問題