我有一个自定义键盘,我用来编辑文本mytextField,它很棒.但是,我永远不能让shouldChangeCharactersInRange代理使用我的自定义键盘执行.它在我使用我的实际键盘时执行(显然不是默认的iPhone键盘,因为我设置了mytextField.inputView = numberPad.view).我该怎么做才能使shouldChangeCharactersInRange代表使用自定义键盘触发?顺便说一句,自定义键盘只是一堆按钮.
- (void) numberPadPressed: (UIButton *)sender {
[mytextField insertText:[[NSNumber numberWithInt:sender.tag] stringValue]];
}
- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string {
NSString *resultingString = [textField.text stringByReplacingCharactersInRange: range withString: string];
NSLog(@"shouldChangeCharactersInRange: %@", resultingString);
return true;
}
- (void)viewDidLoad {
mytextField.text = @"";
mytextField.inputView = numberPad.view;
mytextField.delegate = self;
[mytextField becomeFirstResponder];
}
Run Code Online (Sandbox Code Playgroud) 我正在使用此帖子中的宏循环遍历我的参数.一切都很棒!但是,有没有办法这两个结合起来CCB_CREATE,并CCB_CREATE_MORE?
我需要提取第一个参数object_type来编写其他代码.附加的object_types将使用FOR_EACH循环插入到地图中.
当我在使用时只有一个参数时,编译器会抱怨CCB_CREATE_MORE(Type1).为了解决这个问题,我制作了另一个宏来处理它CCB_CREATE(Type1).希望找到一个聪明的解决方案,将这两者结合成一个优雅的宏.有任何想法吗?
#define INSERT_LOADER_MAP(object_type) loader_map.insert(make_pair(#object_type, object_type##Loader::loader()))
#define CCB_CREATE_MORE(object_type,...) \
static CCNode * create##object_type##Node() { \
std::map<std::string, CCNodeLoader*> loader_map; \
std::string classname = #object_type; \
FOR_EACH(INSERT_LOADER_MAP,object_type,__VA_ARGS__); \
return loadCCBFile((classname + ".ccbi").c_str(), loader_map); \
}
#define CCB_CREATE(object_type) \
static CCNode * create##object_type##Node() { \
std::map<std::string, CCNodeLoader*> loader_map; \
std::string classname = #object_type; \
INSERT_LOADER_MAP(object_type); \
return loadCCBFile((classname + ".ccbi").c_str(), loader_map); \
}
Run Code Online (Sandbox Code Playgroud) 我将不同的UIControlEvent路由到一个事件处理程序.想知道有没有办法确定发件人来自哪个UIControlEvent?例如(内部触摸,编辑开始等...)
- (IBAction) MultipleEvents: (UITextField *)sender {
NSLog(@"Hello World");
}
Run Code Online (Sandbox Code Playgroud) 在Xcode上进行cocos2d-x 2.2.0开发5.尝试使C++ 11正常工作,但它会产生一些链接错误.任何建议都非常感谢.
该项目在github上.
下面是C++ 11配置(stackoverflow参考).

我挂libstdc++.6.0.9.dylib&libz.dylib除了默认库.

错误构建日志在这里.

AVAudioPlayer 对象是否存在内存引导问题?在模拟器中使用 AVAudioPlayer 时出现内存泄漏。我如何创建 AVAudioPlayer 并不重要。我用过initWithContentsOfURL和InitWithData。下面是代码的一个片段。完整项目@ Github https://github.com/docchang/MemoryLeakAVAudioPlayer
NSError *error;
NSURL *playerURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Bell" ofType:@"m4a"]];
self.playerWithURL = [[AVAudioPlayer alloc] initWithContentsOfURL:playerURL error:&error];
if (!playerWithURL) {
NSLog(@"no %@.%@: %@",@"Introduction2", @"m4a", [error localizedDescription]);
}
playerWithURL.volume = 0.9f;
playerWithURL.numberOfLoops = 0;
[playerWithURL play];
Run Code Online (Sandbox Code Playgroud)
但是在设备上测试时没有内存泄漏。这个问题开始倾向于 AudioToolBox 库的问题,但只是想与 stackoverflow 的人确认一下。
正如它在Apple的文档中所述:http://developer.apple.com/library/mac/#documentation/cocoa/Conceptual/ObjectiveC/Chapters/ocCategories.html#//apple_ref/doc/uid/TP30001163-CH20-SW1
Note that a category can’t declare additional instance variables for the class; it includes only methods. However, all instance variables within the scope of the class are also within the scope of the category. That includes all instance variables declared by the class, even ones declared @private.
但是,当我尝试访问UITextField"_selectionRange"的私有实例变量时,我得到符号未找到错误.以下是我的源代码和错误消息供您参考.我为那些阅读我最后一个例子"NSString"的人道歉.这不是一个很好的例子,因为NSString类中没有任何@private实例变量.
的NSString + Utilities.h
#import <Foundation/Foundation.h>
@interface UITextField (Editing)
- (void)deleteBkw;
@end
Run Code Online (Sandbox Code Playgroud)
的NSString + Utilities.m
@implementation UITextField (Editing)
- (void)deleteBkw {
NSLog(@"%d:%d", _selectionRange.location, _selectionRange.length);
}
@end
Run Code Online (Sandbox Code Playgroud)
错误:架构i386的未定义符号:"_ OBJC_IVAR _ …
objective-c instance-variables private-members categories ios
一切都在模拟器上运行没有问题.但是,当我把它放在我的设备上它只显示ThumbImage.这真的很奇怪.我认为这可能是iOS版本问题或内存问题.我的设备是iPhone 3GS iOS 4.1.Xcode版本3.2.5.
@interface BlueChalkSlider : UISlider {}
@end
@implementation BlueChalkSlider
- (id)initWithCoder:(NSCoder *)decoder {
if ((self = [super initWithCoder: decoder])) {
self.backgroundColor = [UIColor clearColor];
[self setThumbImage:[UIImage imageNamed:@"Chalk.png"] forState:UIControlStateNormal];
[self setMinimumTrackImage:[UIImage imageNamed:@"ChalklineBlue.png"] forState:UIControlStateNormal];
[self setMaximumTrackImage:[UIImage imageNamed:@"ChalklineWhite.png"] forState:UIControlStateNormal];
}
return self;
}
@end
Run Code Online (Sandbox Code Playgroud) 我正在使用下面的方法设置背景图像.当我旋转设备时,背景重复,这是有意义的,因为它不是图像.如果这是我设置背景图像的方式,如何处理方向更改?
- (void)viewDidLoad {
[super viewDidLoad];
UIColor *background = [[UIColor alloc] initWithPatternImage:[UIImage imageNamed:@"background.png"]];
self.view.backgroundColor = background;
[background release];
}
Run Code Online (Sandbox Code Playgroud) 我想知道有没有办法设置我的Base类,这样我就不需要在调用时覆盖派生类Activate().它使用派生类的泛型类型调用相同的函数.
public abstract class Base
{
public abstract void Activate();
}
public class A : Base
{
public override void Activate()
{
Foo<A>();
}
}
public class B : Base
{
public override void Activate()
{
Foo<B>();
}
}
Run Code Online (Sandbox Code Playgroud) ios ×5
c++ ×2
objective-c ×2
audiotoolbox ×1
c# ×1
c++11 ×1
categories ×1
cocos2d-x ×1
delegates ×1
generics ×1
inheritance ×1
iphone ×1
macros ×1
memory-leaks ×1
polymorphism ×1
uiimage ×1
uislider ×1
uitextfield ×1
xcode ×1