我需要有一个SwiftUI按钮在当前关注的组件上执行Objective-C选择器。以下作品:
let button = Button(action: {
let command = #selector(NSStandardKeyBindingResponding.selectAll(_:))
NSApplication.shared.currentEvent?.window?.firstResponder?.doCommand(by: command)
}, label: { Text("Select All") })
...但这显然很丑。 SwiftUI具有Command
结构,可以包装Selector
,但是尚不清楚在创建命令后如何实际调用选择器。
建议在按下按钮时发出任意Command
的方法是什么?
答案 0 :(得分:0)
如果要沿响应者链调度操作,则可以使用-[NSApplication sendAction:to:from:]
方法,将public function getList($name)
{
$category_id = Category::where('name', '=', $name)->first()->id;
$posts = Post::whereHas('category', function ($q) use ($category_id) {
$q->where('id', '=', $category_id);
})->paginate(12);
return view('blog.index')->withPosts($posts)->withName($name);
}
传递给目标。
如果要使用AppKit响应程序链,则可以执行此操作,其中可能包括您的SwiftUI nil
以及其余响应程序链(其超级视图和窗口,等等)。从理论上讲,如果您想处理SwiftUI内容中基于选择器的操作,则可以使用onCommand
修饰符来识别包装该选择器的NSHostingView
。但是,您的Command
必须位于AppKit响应程序链中,并且NSHostingView
SwiftUI视图需要被聚焦(或聚焦视图的祖先),以便识别命令。这样做的主要好处是,您也可以使用完全相同的代码来处理菜单栏动作,因为菜单栏动作通常是通过响应者链分派的。
如果您要修改与其他某些SwiftUI视图相关的状态,将onCommand
或闭包参数传递给视图结构作为其初始化程序的参数可能更直接。例如,您可以在其他地方保持某种状态(即“所选对象集合”),然后将闭包传递给修改状态的按钮(“将所选对象集合中的每个对象放入”),而不必直接讲授关于该状态的按钮。