You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Objective-C中检测Today Widget的展开/收起或"Show More"点击事件?

在Objective-C中检测Today Widget的展开/收起状态及"Show More"点击操作

当然可以!在Objective-C开发Today Widget(也就是iOS的小组件扩展)时,我们完全能检测到它的展开/收起状态变化,以及"Show More"按钮的点击操作——其实后者本质上就是触发了状态切换,咱们一步一步来看怎么实现。

核心实现:利用NCWidgetProviding协议

系统为Widget扩展提供了NCWidgetProviding协议,其中的widgetActiveDisplayModeDidChange:withMaximumSize:方法就是用来监听Widget显示模式变化的核心接口,"Show More"/"Show Less"按钮的点击会直接触发这个状态变化。

完整代码示例

首先,让你的Widget视图控制器遵守NCWidgetProviding协议,然后实现对应的方法:

#import <UIKit/UIKit.h>
#import <NotificationCenter/NotificationCenter.h>

@interface TodayWidgetVC : UIViewController <NCWidgetProviding>

@end

@implementation TodayWidgetVC

- (void)viewDidLoad {
    [super viewDidLoad];
    
    // 关键设置:允许Widget切换到展开模式,这样才会显示Show More按钮
    self.extensionContext.widgetLargestAvailableDisplayMode = NCWidgetDisplayModeExpanded;
}

// 监听显示模式变化的核心方法
- (void)widgetActiveDisplayModeDidChange:(NCWidgetDisplayMode)activeDisplayMode withMaximumSize:(CGSize)maxSize {
    // 根据当前模式调整Widget的内容高度
    if (activeDisplayMode == NCWidgetDisplayModeExpanded) {
        // 展开状态:用户点击了Show More按钮
        self.preferredContentSize = CGSizeMake(maxSize.width, 250); // 设置展开后的高度
        NSLog(@"Widget已展开,Show More按钮被触发");
        // 这里可以添加展开后的逻辑,比如加载更多数据、显示隐藏的UI元素
    } else {
        // 收起状态:用户点击了Show Less按钮
        self.preferredContentSize = CGSizeMake(maxSize.width, 100); // 设置收起后的高度
        NSLog(@"Widget已收起,Show Less按钮被触发");
        // 这里可以添加收起后的逻辑,比如隐藏额外内容、释放不必要的资源
    }
}

@end

关键细节说明

  • NCWidgetDisplayMode有两个枚举值:
    • NCWidgetDisplayModeCompact:Widget的收起状态,默认高度较矮
    • NCWidgetDisplayModeExpanded:Widget的展开状态,高度更高,需要用户点击"Show More"触发
  • 必须在viewDidLoad中设置widgetLargestAvailableDisplayMode为NCWidgetDisplayModeExpanded,否则Widget会一直处于Compact状态,不会显示"Show More"/"Show Less"按钮
  • 每次用户点击"Show More"或"Show Less",系统都会调用widgetActiveDisplayModeDidChange:withMaximumSize:方法,你可以在这里处理状态变化后的业务逻辑,比如UI调整、数据加载等

内容的提问来源于stack exchange,提问作者DocAsh59

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:59:18