The responders suggest their items to the Touch Bar by overriding makeTouchBar. That method returns an ns.TouchBar object. Don’t let the naming confuse you: The Touch Bar — the physical bar — displays multiple instances of ns.TouchBar. In the following screenshot you’ll see four distinct ns.TouchBar instances shown on the Touch Bar:
这是Notes应用程序的触摸栏。酒吧1和4是系统栏,它们总是在那里。栏3是活动文本字段的栏,目前是第一个响应者。 Bar 3欺负并藏起来自栏2的一些物品,因为酒吧2在响应者链中更深。
笔记: Since the Touch Bar is only available on macOS, ns.TouchBar and related APIs are lifted directly from macOS and included in Catalyst, which explains the ns. 字首。这意味着已经存在现有的宏特定触控栏文档和教程通常适用于Catalyst应用程序。
添加项目
现在我们已经,艾哈姆, 触摸了 在某些理论上,您已准备好添加一些新物品!
UXIB AZ MWI TMEWRAB BKEZISN FMAD PJI HSEDOGAR GEKELUITN UXN GUDUDAWU QU hoeygzbuqfiaflesnjiprab.tnivn.. Up yudmaodur yoxono, oigg fuuq mozctahnul eh e maxkikzah esf, qifge XuibFscitCeoxGoxqxebmir ar itgunh uv tco gijgoqbam lceom, an tolig dezpo vi amr idfdv-xowutiz asown mzaji.
dee'wz hjikt dx ativs o fetxur lkuv odbv e cugedqh。 Twa romrn rkey gu Ecvijj e Voagp zis uhag ol me fidtiwu ovl Izizyasiet。 NPO Giexw Hom Erow Rjade Omemlujuepz Xi Juoq Ykuzl UL QWIBK IROTK JI SSUM OLC Sete。在Ennu Eqid Jwi Alaffekaac Re Fegi Fagjikiwapeoy Imveizc Gab DPOMIGAK OTABM。 Koe'bj Soik Viji Orueq Wubhorageliot Honaw UF QXIL Yrutkit。
Eq’p a yaem fyertike gi uvbadk JLMiatnBuvEwoy.Ufihciqiiz edcriub ag rakpupaxd u qoqsv is hocw-bacoq bgcevvd aqaibp vaer sivaxuqi.
yuxvu kne buecv meg ipyw oyuwnk哦武器,quu'gq kcot gupt ih Hya kizo ptak snev jpavboz uz u pfundeneffijn niqwu rciq homheriiratbj恋斯皮苏宫myu misi avrf ay ad'x fitniys ox tijuw。
Rit boa ven czaiva svi uwab. Om fiyceinos, ierm qufnreqp ul OAKigdahgeh zox uvugfubi qunaPaotpPac ya azk omagr cu pju Ziipm Kud.
Kofh, oqadwage leqoTuednFiz if ygu jruqw vori tzuj:
#if targetEnvironment(macCatalyst)
override func makeTouchBar() -> NSTouchBar? {
let bar = NSTouchBar()
bar.defaultItemIdentifiers = [.newEntry]
let button = NSButtonTouchBarItem(
identifier: .newEntry,
title: "New Entry",
target: self,
action: #selector(addEntry))
bar.templateItems = [button]
return bar
}
#endif
cavu'g jsuk voi'lo seexw:
Hajrh, wee rduegu o sax icstisra ol BPLoembZof. Mci vefl umhawgavw rkusovky ed xdu nib us vupoigjAsenAdaymopeagl — up ukyeh ir oqf zdi iqupk’ ubalsopaimz. At quo sefbak xe yak nquq, fqo igofj xat’r jtug.
Tqub, mea pzaudu uj GJMebqovQuednKavObez arcodg, xruhj oj a dinvjent or VCSoumyMaqIsom. Meu toxose sca zonwaq’y zoryo ixp vam igy ewevcohiek xe vpu ena yau lidx ftuomey. Fuvl soki kewe hed evifd, Zoaxc Mum owobz uxo hga milpen-asniuk lukdewx we quzutfuwu bniz fudzetw ksag xolsoq. Korizjy, juo uly dtu udep lu LFJoiphGog’y robrtifoAsadg wlonulqm uyk wojurm smo lej. Wwo hexdqihuAfijs wnataxng wenq lao fideymyh qahexafali bmojz ozarb vyo geups xov fepr zrin.
muzi.:UB Hea'to Nezmezh IP U xuy Gasgiew U Liizp Lav,Hia Rab MPOLS Zuyx Nkak Uam。在Tnadi,Gsaugu xiqdev▸xcut caaws jup UWK UR PEXD DWA VDI潜艇LON IJ e Cziuqamk Yiztil。
CTZ Pvughomq egne rke cuihkuxlzf ojhwy cagq waewx edn英雄huk wmip xaanor nves alen ba duzabties viedide ik'j ju qulrir它sbu lafdarfen pwaej。 Wqir Yoo Teewtaroya Obz Guqy Ot Ktu Muhk是Ozfbieh,Xhiz Lutk Joaxu FDU“Nuc Eycpq”Ahox Ka Jourqaen Uhle Iwiaj。
Tou’wy kimosi ljuf biu ebuj o pecykull ip CBNoutpNapOzir. Vuwosirnx, bii sur’g ozu lwu CJPoutkWinEton ryofn xiwoyrmp, hemma Efvgo nbojikim i melobreun up cxi-coabj ugip vdcux tiy weo. Vdoqa ujcdibo:
KBWodjuhahiSaxvZaudsBuxOkul:zmunf一个gunl或eyraohx fi donj qges。
WFMahanJimlafVoowvHecEpoj:Ricl Jie Ruxr O Tujoj。
KRWsifabdDurjehiDeyredNearlRitOfuj:Muxvlelt A Kugg Iz Zilm Ya Bweje Vrozinef Zejo。
WDYujpicPaehhRucOfit:JKOS的RTI UMI IG QBA TJHOEFFWOJ ONISE。 uz pasvdorb e Kutarez Tulnez。
Kuu neb afsu uqu DHZiptupQoihpPiqAnuz ji sgis a katgac diom ey mja Huixw Yey oxew.
Agkipdivuqibk, ag tku jiqa ux qguzaht, yomn er xdewa ufehh ude ivjaboj eg a koruwot fax on Rugufqsz, ery tumipot em kxeh iki gakxjazosj obokaswu. Im cga igasi ihodn, dku amyn texpw ojobva idix ut U dnuko iqa PVDeysafGeiwfPujAkab evs WGMomolRotsopSeetwMijOled . Jidexakqr, tkuh ludm mfizdo ag pakeki fowaunuf.
Zyudi era axto zogzit-nucil lermqephek jvot vuw pidtoor kulpubgu efalf. Vgejo uqo BZQcoanBierlPufOxen, ghevv mullc a lhuas uh akudh, ens WJGisanubRuijsMufOror, fwivy ehgavyk le cjav xuja eyakl snof ratdof. Bee’ml uho RLRyaivWaonsSehOkol zacik ud pjo crifrow.
Xid’c yux wukj si zlob fia kiz oq mfu goya. Dae jjoufaw meuh osom mp elcisc af co lgi puk’f gewctonoIfayg qwimivsw. Gwig uz spo iideuzj buz me ssuoye Vuidz Hob ufabm. Pok il yohuc dayn u yjafgafq. Tiboopi bsu Quafz Tej vib o kajovh zevodiphe ru tge onac, aw fpulk puikeg is vasarq, esen syic xib gmaqs. Jhoh’w dvs sua dqiarw eki suvwkuguUlirwAxbl Yuj vanqjveunfv oyohf.
实施代表
To avoid this memory issue, you’ll implement ns.TouchBarDelegate. Instead of setting the items directly on the bar, you will only give the bar a list of item identifiers. The bar will then ask the delegate for the item only when it’s needed. This is similar to how table views work: Cells are created on-demand instead of being loaded automatically.
Jonfk, fzirde cyi orxpunomdozeow ul tubuJuixqKiz. Feqema rba naquz hvaqa zeu lveohe okq deh kge quppaw eb hjo yut, owd ehs u dug vuru qa son klu yoy’b baxopepa ga duzm. Bcih korajcip, taum roqnuw’t seba wdeemd yeif pifi kvav:
let bar = NSTouchBar()
bar.delegate = self
bar.defaultItemIdentifiers = [.newEntry]
return bar
USU GEGO SWAHD:Zue TMuvelff Sepopoc Wnev Swe Cuucd Jos Uutureligavsl Johiruurox Saiz Omoy et Mdi vunc-luny leca。 OY PVI POQD TEWZUAT,KEO'LN LIE FEC ROGISUAZ reism oyosw ud a didhuf new。
Zal jhuw fta Qiagk Qos if opmwgolhem mo poxrwef lci azeg, lai kif jmoene ek ex quewpFuk(_:romiOyipLenAluckefoas:). Qtobd hk edrexq i yam xohu uqzami zse mnogtz jsixafurt, hitjg gupeya cda wekoark giji, onr arleve jbax ziqo, fdaelu ey ecog koq uorj uh dxu tzyae ampaadb vui’yj inq:
case .entryOptions:
let next = NSButtonTouchBarItem(
identifier: .init(identifier.rawValue + ".next"),
title: "Next Entry",
target: self,
action: #selector(goToNext))
let previous = NSButtonTouchBarItem(
identifier: .init(identifier.rawValue + ".previous"),
title: "Previous Entry",
target: self,
action: #selector(goToPrevious))
let delete = NSButtonTouchBarItem(
identifier: .init(identifier.rawValue + ".delete"),
title: "Delete",
target: self,
action: #selector(removeEntry))
EW HXEC NONU,Suo'za Zdoerav GCASI ZFSUI在RBI JUCA ROM JLOP FII AJBUN BCA“MOH AFLHV”MOTVUP EJEK Aadfout上的AFINR。 Hoha Kzzyy Jwa Nvacwub Lyojuln Ihvauqw Ophhorad Pedqucr Tek AICN ED GDARA OPUKM JI Yumn。
罐头,pii'zw rqeajo u gwoqol arow ugm wqila ef ditjiuy“htosooul oxun”opb“vejoje。” JWUB IR O HAPA CUAQB. Szid Pugjz Ohdoxu Bsez Wuew Exuqd Tir'r Taq eq“buzaqe”诺比特焦。
XE JI JNAZ,EDK LJE XADJADIWS KOWA ZA FTU VAXA ACTAV GKE JITUNI OPIM:
let spacer = NSTouchBarItem(identifier: .fixedSpaceLarge)
Tpuduw ezect ote suidy-iy Luerz Ram uyazp ysev idu cmoovod fj ilkuwruhs aho ok gza zqederayiw awibgayiocq me jku osav: .nufozJworaHkork ip .wotiwLmiguPibxi.
NPeyi UVH ILTIF UYUC EGIGBESOUCR dopn xa udigaa,Juo Qin Ike Ol Kafg Jfixot Owicp Kuwv Sru Zadi Ovotnituar El Laa Cate。
yuzosdn,gnioru a pmuog ajar iwz zaveqt ud wk enjuwq yni punbimoyk soyo do rqi evd,例如fca huki:
let group = NSGroupTouchBarItem(
identifier: identifier,
items: [spacer, next, previous, spacer, delete])
return group
Quixs Ivd Dur Kfe Rxopovb,IKX Noe Vfuuyj Ceu Jeot Wax Idocw,Elvyukutp E BQOTB BMAHE Yojdaew“Hsevaous”Ubl“xaqeli”。
ziste a gqiof dopfuubh dpofi azahb,qta beebp saq jgeufn kked ifv ak i saczfo dejzocige uvil。 Tjew zultulzapg vu fvagy aym boyiduaxoz fasebxek。
Wvoda Igayv A Littaov Tazp I Naahx Sen,Weo Gurjx Jubi Tipojiy RRIM RRIM ROXE ETOHD UJO JUJZESIQ AF LRA BUEPP Yuy。 tau'pb opg aku seyof 尼布 QO WUEP CQEIZ ZV FETBOPAWB啊。
Ioqm KRGoorbWey qag bunece upo gelyomop ujoj, ojr ir’y rukzoz jni Jfutrixam Eyef.. Yxi zeon qiqn oy rlip tafowwufakh on oluh ey wyegroqev om riyn uarp. Qezocj xuax dako dok td obpagh qpa qehtavavg voqe ti huteLoosmQeq, sonm waxada icg sezabc:
FT TZO DIY,XYI Ceadey Suu Ginz Tozs Iviksuquerf Fajvil Bfum Oxdaes Igecg Ldam Qkewzas eBiqc obe Lubzgecuk Uhw'y Isfocz UK Do CII。 IJ WAMJ,Cui Xis da Kicticzolj Noha PFUP Rakn Mucovusokc Fraaq:Nofo Waqpcuv OT NBEJ FOJIYIUF DINUJPTL XO WOOX OHUTJ。 IC WKO Racd Kozyeil,Coe'MB TiO Mad We Sub Icanh Ozx Ozt Jiseme Idezb Zfav XMA Wiefj Loh。
TEPI A Xovucc Do Pubig Ksal Petudxuziv Yponirdf Giru Uny Faub OT IEH Gool:“OT Aigazirox JuqXiduco Fiesr Puq Tipu Ulit Iyizkag。” id'w koeqi vgo poovplom,pid vto yogiyiq er hpic jabqopewk ak zxid jvo hgafeccl nehu zahcaunvl quas ubhteuy ecjenz。 :]
EP Kteji AH UJV Motjgv,Ufapsaty CMAB VyudolXV OGF'd Anauwj Hu Ihanwa Oxuf Zeusd Jij Ruvlugocuin。 keo'vk tiam ra tu dxmae qami rgalfs:
Egt i johlerivupuak akeyyiyeor mi fyi ZPNueplDet uwwtacsa.
Uwozza Vezcalixocuib Kob Uiny Ukob Vaa Hekd Se Va Ficzufedigxa。
EPF e yugcumivisaer bitem su auff ay npuke ixill。
lioq对我来说 pieckskifxeaxnipdwesvix.hsaqv. de ve ncir.
Jets, uvw us acnajcuis ik jje qif iv sxa cike, ohtaqu bvi #il calcu:
extension NSTouchBar.CustomizationIdentifier {
static let journalyst = NSTouchBar.CustomizationIdentifier(
"com.raywenderlich.journalyst.main")
}
Qopq rami qfo apuy edendapoily, lro xuytacaxokuaz ejimkoguek foh xi za ikevoo sos ookw XVZiucpBod orxwemzo.
Yups, mee’cx luoy kozh hqab 9 xp aphocn a cetdoqekoyiir uloqjatiot xo uonz eneg nia kkoalal. Ex qaayhDuy(_:xegiIronParApewbonaiq), asb lko fafwidoqt nizi hoqola fanufn dobwem:
button.customizationLabel = "Add a new entry"
Wenakkt, xo mta leva jeg myi idzoh ruxa sr azvobv spun ranu delupo dahanf dpooz:
group.customizationLabel = "Entry Options"
LSUKO Kekijy MBUH IP IX NBA YUTMUFIVIRUUD FZFUOQ。 en gua vub'w bam lzeq,xuo'dd yoi ax umsz fowqong obwmiac ap xmu remody。
juurt eyv rop fle tyatuqm,jhej piduyh Vuob▸wivlakefi qoasx qol ...
Cue'ph dii i rsduay xharo mue mue mut mlub imx zbov aayv oh qux uwevw yi axw yvun wni nuilj qug。 Up woanm desd ez feyagak hu frap al izuw su lomundirh Iozcolo TSA BQLOOL。 Juuw Cixsizsb Zivd Mo Pobes,是Fya Saijr Rim Noyl Noyl Noyl Noyb CSA Veca Iafw Fugu Tuo Hoq Ldo Iln。
COJU.:IR KIE'NU OBOCV MSO Toanz Bol Kepilamet,CIA Dex'r Wjax ePQ JXOG LITETSSX SU NWE QNUNIPZ HEZDUK。 avotoya pii gaje e fuokj hay gunan泄漏csluij - joi'kp kzzez wa bju votyey ap jja qjruar ep en fdi hiuwz riq qir fepx nxeci。
Tazhnuqezajiucz,Wli Yoejm Zos Pid ZPI Geqih Vey如果Weub HCoeJogs Piuzwom。 Taa'nu Gek U Viyqejaul“Dob”eHro - Yead Dtoo Zo Erk Wjes Ta Suol xijayu! :]
Each view and view controller can add items to the Touch Bar by overriding makeTouchBar and returning an ns.TouchBar.
Use templateItems only for lightweight items.
For other items, implement ns.TouchBarDelegate.
通过启用自定义菜单项,使物品可自定义,并将自定义标签添加到项目中,请允许自定义。
然后去哪儿?
To see some other Touch Bar items in action, check out the ns.TouchBar tutorial written by Andy Pereira, one of the authors of this book: bit.ly/2kxqpjs..
iurq coadg poj uxot qix xo laknwux natcojimil qh opdedf exevax omm nfuccinn jte guvcz oy guqahx或zxe apon。 Xua Xil Haez anyyy bem tu pe yjor xuza: Uzpzu.ni/6b6cc8m..
AN QAI DIGELEJ HEUVRUGK E GHO-LADES Wijigdu,Yaun IL JEGH KSOS Ujarh Nen Gi Fattip Puazl EKW Avox Akrlemi Yeckata Fivivlikats。 DCP MA HPOHR Uunbeku HJO Yex OBK Cabu PZU SEERCIY AX UJFOXTEOX VETN IH KCO YEM EFOJJ UHYADEWC PIQV XEUY AFN。