Aug 23, 2011

(Android) How to listen MessageEvent in XMPP with asmack

The asmack could not load providers from smackx.jar automatically, if any project needs listen MessageEvent (composing, delivered, displayed, offline etc.), these lines must be added manually.

After established a connection:
connection.connect();
ProviderManager pm = ProviderManager.getInstance();

// Add extension provider
pm.addExtensionProvider("x", "jabber:x:event",new MessageEventProvider());

Dec 7, 2010

(iOS) Available font family

A good example to list all available font family of iOS system. Check it out.

Nov 19, 2010

(iPhone)How to display different color text

There are several ways to display different color text in iOS device.
  1. Use multiple UILabel and each contains different font style.
  2. Use HTML tag and UIWebView.
  3. Use NSMutableAttributedString, this classe is added in iOS from 3.2, it needs Core Text to render rich text on the view. AliSoftware created a useful classe UIAttributedLabel which is an UILabel's subclass and supports NSMutableAttributedString. Check AliSoftware's github for more information.

Aug 19, 2010

(iPhone)How to customize UIAlertView

First solution is using addSubview which add subviews into an UIAlertView, just don't forget add newlines in the initWithTitle method's message to make sure you have enough space for subviews. Like :

[[UIAlertView alloc] initWithTitle:@"Title" message:@"\n\n\n" delegate:self cancelButtonTitle:@"Cancel" otherButtonTitles:nil]

But this solution couldn't change UIAlertView's background, here is second solution that creates an UIAlertView's subclass, overrides several methods (setAlertText, alertText, drawRect, layoutSubviews and show), Joris Kluivers made an excellent sample, check it here : CustomAlert 

(iPhone)How to customize UINavigationBar's background

UINavigationBar has 2 methods to change it's style, barStyle and tintColor, but neither could set a background image for UINavigationBar.

Here is a solution to do that, add following code in your app delegate implementation file (.m) :

@interface UINavigationBar (MyCustomNavBar)
@end
@implementation UINavigationBar (MyCustomNavBar)
- (void) drawRect:(CGRect)rect {
    UIImage *barImage = [UIImage imageNamed:@"background_image.png"];
    [barImage drawInRect:rect];
}
@end

And change the "background_image.png" to the image what you want. This add a category in all UINavationBar used in your application, and you will see a fancy UINavigationBar.

Jul 28, 2010

(iPhone)How to debug EXC_BAD_ACCESS

In iOS programming, the EXC_BAD_ACCESS happens when application try to access some deallocated objects, but the Debugger Console usually display a simple message of "EXC_BAD_ACCESS", here is an useful solution to track the deallocated object.

- Set NSZombieEnabled = YES. With this argument, console will display a little bit more information, like "method : message sent to deallocated instance ...", sometime we can track the object in the method when it is easy to find.

- Set MallocStackLoggingNoCompact = 1, this argument allow to display alloc history of the object, for example: we got a message "message sent to deallocated instance 0x58448e0", type "info malloc-history 0x58448e0" in the console will display the allocate history of object 0x58448e0, which contains object allocation and deallocation, it is really useful to debug the incorrect release call.

To setup these 2 arguments, you should go to "Project"->"Edit Active Executable project name", add these 2 variables in "Variables to be set in the enviroment", names are "NSZombieEnabled" and "MallocStackLoggingNoCompact", values are "YES" and "1". And check the checkbox to active.

Don't forget remove these variables when you release your application.