首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >西奥斯:试图从ChatKit的CKContentEntryView手中接过UIView _subjectLine

西奥斯:试图从ChatKit的CKContentEntryView手中接过UIView _subjectLine
EN

Stack Overflow用户
提问于 2012-08-12 09:03:19
回答 4查看 3.4K关注 0票数 6

我正在尝试控制消息应用程序中的主题行。现在,我只想在主题字段中显示文本。

我遇到的主要问题是让编译器将_subjectLine识别为有效视图。这就是我尝试对_subjectLine执行任何操作时得到的结果

代码语言:javascript
复制
Tweak.xm:8: error: ‘_subjectLine’ was not declared in this scope

我不知道如何声明一个已经存在的项目,以便在调整中使用。我在Xcode中使用的标准声明(通常可以在头文件中找到)似乎工作方式不同。

我已经用谷歌搜索了大约一个星期了。我发现的最常见的教程或信息都很简单:当方法激活时,显示警报。我可以做到,没问题。但是,我需要使用一个已经存在的对象。

EN

回答 4

Stack Overflow用户

发布于 2013-01-17 21:17:31

在您的示例中,您似乎正在尝试使用所挂接的类的实例变量。在微调中,修改实例变量不会以这种方式工作。你必须使用MSHookIvar来“挂钩”一个实例变量(也就是依瓦尔)。示例:

微调.xm/mm

代码语言:javascript
复制
#import <substrate.h> // necessary
#import <Foundation/Foundation.h>

@interface TheClassYouAreHooking : NSObject {
    NSString *_exampleVariable;
}
- (void)doSomething;
@end

NSString *_exampleVariableHooked;

%hook TheClassYouAreHooking
- (void)doSomething 
{
    // 'Hook' the variable

    exampleVariableHooked = MSHookIvar<NSString *>(self, "_exampleVariable");

    // The name of the hooked variable does not need to be the same

    exampleVariableHooked = @"Hello World";

    // You can do ANYTHING with the object Eg. [exampleVariableHooked release];

}
%end

MSHookIvar还可以钩住BOOLs和float之类的东西。

代码语言:javascript
复制
exampleVariableHooked = MSHookIvar<BOOL>(self, "_someBOOL");

它是在subate.h中声明的,所以你需要导入它,否则你将无法编译你的调整。另外,作为额外的提示,我只想提醒你,你必须把你挂接的应用程序/框架的标识符放在你的tweakname.plist中。

所以在你‘钩住’这个变量之后,你可以改变它来满足你的需要。祝你编码愉快!

票数 10
EN

Stack Overflow用户

发布于 2013-04-06 09:21:08

您还可以使用Objective-C运行时函数来访问实例变量,如下所示:

代码语言:javascript
复制
UIView *subjectLine;
object_getInstanceVariable(self, "_subjectLine", (void **)&subjectLine);
票数 2
EN

Stack Overflow用户

发布于 2013-01-20 01:45:54

我对ChatKit不熟悉,但我很快就看了一眼。你不能访问_subjectLine,因为它是一个依瓦尔。您只需访问

代码语言:javascript
复制
id subject = [myCKContentEntryView subject]; // should return a CKTextContentView
NSAssert([subject isKindOfClass:[CKTextContentView class]], @"ack");
CKTextContentView * myTextContentView = subject;

CKTextContentView有一个setText方法,但不知道它需要什么,因为参数是id。可能是一个视图(UILabel?)或者可能需要一个字符串。您可以尝试:

代码语言:javascript
复制
[myTextContentView setText:@"Hello World, w/ jimmies!"];

看看会发生什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11918934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档